Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Thinking in C++ Kapitel 4, C-like library



Burger
09-01-2006, 14:14
Hallo,

ich bin es wieder. Ich habe jetzt Kapitel 3 abgeschlossen und mich mit Wagemut an Kapitel 4 herangemacht. Dort wird zunächst eine "tiny C-like library" vorgestellt. Habe das soweit alles nachvollziehen können. Damit ich das Ding dann aber auch in "Aktion" sehen kann, habe ich es abgetippt (hüstel) und versucht das Demo-Programm zu kompilieren.

Das hier ist der Befehl zum kompilieren:

g++ -o ./CLibTest ./CLibTest.cpp ./CLib.cpp

Es folgt dann diese Fehlermeldung, die ich nicht verstehe...

./CLibTest.cpp: In function ‘int main()’:
./CLibTest.cpp:25: error: conversion from ‘CStash*’ to non-scalar type ‘CStash’ requested
./CLibTest.cpp:32: error: conversion from ‘CStash*’ to non-scalar type ‘CStash’ requested
./CLibTest.cpp:34: error: conversion from ‘CStash*’ to non-scalar type ‘CStash’ requested

Ich vermute, dass sich die Fehlermeldung auf den Aufruf der Funktion "void* fetch(CStash* s, int index) bezieht, da diese ja einen void-Pointer zurückliefert.

Zeile 25 in Test.cpp lautet:

cout << "fetch(&intStash, " << i << ") = " << *(int*)fetch(&intStash, i) << endl;

Zeile 32 lautet:

add(&stringStash, line.c_str());

Zeile 34 lautet:

while((cp = (char*)fetch(&stringStash,i++)) != 0)

Wobei cp ein char* ist.

Ich wollte nicht den ganzen Code (sowohl header, lib als auch Test) posten, weil ich hier nicht ausufern möchte. Sollte es gewünscht sein, kann ich das aber tun.

Mir würde für den Anfang aber auch schon eine Erklärung dazu genügen, was ein skalarer bzw. nicht-skalarer Typ ist.

Bis dann,

Marco

peschmae
09-01-2006, 18:08
intStash/stringStash sind wie deklariert?

Die Warnung meint meistens dass du nen adress-of & - Operator oder nen dereferenzier *-Operator vergessen hast und statt einem CStash ein CStash* übergibst oder so.
Aber im konkreten Fall seh ich den Fehler gerade auch nicht.

MfG Peschmä