Unused symbol(s) Linker Error in simpelstem C++
Verfasst: 11. November 2010 13:13
Hallo Leute,
ich weiß grad überhaupt nicht mehr woran es liegen könnte... Ich benutze QtCreator als reine C++ IDE ohne Qt auf OS X Snow Leopard. Also Qt ist schon installiert, jedoch binde ich die Bibliotheken nicht in den Quelltext ein.
Dort gibt der Linker folgende Fehlermeldung aus:
g++ kompiliert jedoch ohne Probleme.
Leider kann man anscheinend in Codeblöcken keine Textformatierungen machen, deswegen poste ich den Code ausnahmsweise außerhalb von Codeblöcken.
Hier sind Codevarianten, die den Fehler auswerfen, die Änderungen sind jeweils rot markiert.
Die fehlerhafte Methode wird so aufgerufen:
///////////////////////////////////////////////////////////////////
class JFile
{
//...
fstream out;
public:
string reads (const int& n,string replaceZeroWith="");
};
string JFile::reads (const int& n,string replaceZeroWith)
{
char* buffer= new char[n];
out.read(buffer,n);
string s;
for (int i=0;i<n;i++)
if (buffer!=0) s+=buffer;
else
s+=replaceZeroWith;
delete [] buffer;
return s;
}
///////////////////////////////////////////////////////////////////
Dieser Code funktioniert jedoch:
///////////////////////////////////////////////////////////////////
class JFile
{
//...
fstream out;
public:
string reads (const int& n /*, string replaceZeroWith*/);
};
string JFile::reads (const int& n/*, string replaceZeroWith*/)
{
char* buffer= new char[n];
out.read(buffer,n);
string s;
for (int i=0;i<n;i++)
if (buffer!=0) s+=buffer;
else
s+="\\0";
delete [] buffer;
return s;
}
///////////////////////////////////////////////////////////////////
Dieser Code funktioniert jedoch auch nicht:
///////////////////////////////////////////////////////////////////
class JFile
{
//...
fstream out;
public:
string reads (const int /*&*/ n);
};
string JFile::reads (const int /*&*/ n)
{
char* buffer= new char[n];
out.read(buffer,n);
string s;
for (int i=0;i<n;i++)
if (buffer!=0) s+=buffer;
else
s+="\\0";
delete [] buffer;
return s;
}
Ich hoffe hier gibt es jemanden, der sich auskennt und helfen kann,
vielen Dank,
Popeye
ich weiß grad überhaupt nicht mehr woran es liegen könnte... Ich benutze QtCreator als reine C++ IDE ohne Qt auf OS X Snow Leopard. Also Qt ist schon installiert, jedoch binde ich die Bibliotheken nicht in den Quelltext ein.
Dort gibt der Linker folgende Fehlermeldung aus:
Code: Alles auswählen
:: warning: directory '/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/lib' following -L not found
:: warning: directory '/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/lib' following -F not found
:: error: symbol(s) not found
:: error: collect2: ld returned 1 exit statusLeider kann man anscheinend in Codeblöcken keine Textformatierungen machen, deswegen poste ich den Code ausnahmsweise außerhalb von Codeblöcken.
Hier sind Codevarianten, die den Fehler auswerfen, die Änderungen sind jeweils rot markiert.
Die fehlerhafte Methode wird so aufgerufen:
Code: Alles auswählen
int main()
{
//...
JFile f;
// filestream in f wurde im Konstruktor initialisiert
f.reads (40);
return 0;
}class JFile
{
//...
fstream out;
public:
string reads (const int& n,string replaceZeroWith="");
};
string JFile::reads (const int& n,string replaceZeroWith)
{
char* buffer= new char[n];
out.read(buffer,n);
string s;
for (int i=0;i<n;i++)
if (buffer!=0) s+=buffer;
else
s+=replaceZeroWith;
delete [] buffer;
return s;
}
///////////////////////////////////////////////////////////////////
Dieser Code funktioniert jedoch:
///////////////////////////////////////////////////////////////////
class JFile
{
//...
fstream out;
public:
string reads (const int& n /*, string replaceZeroWith*/);
};
string JFile::reads (const int& n/*, string replaceZeroWith*/)
{
char* buffer= new char[n];
out.read(buffer,n);
string s;
for (int i=0;i<n;i++)
if (buffer!=0) s+=buffer;
else
s+="\\0";
delete [] buffer;
return s;
}
///////////////////////////////////////////////////////////////////
Dieser Code funktioniert jedoch auch nicht:
///////////////////////////////////////////////////////////////////
class JFile
{
//...
fstream out;
public:
string reads (const int /*&*/ n);
};
string JFile::reads (const int /*&*/ n)
{
char* buffer= new char[n];
out.read(buffer,n);
string s;
for (int i=0;i<n;i++)
if (buffer!=0) s+=buffer;
else
s+="\\0";
delete [] buffer;
return s;
}
Ich hoffe hier gibt es jemanden, der sich auskennt und helfen kann,
vielen Dank,
Popeye