Ich habe 3 Dateien; main.cpp (enthält main()), FileWriter.h und FileWriter.cpp. Ich benutze g ++ (Version Debian 4.9.2-10) auf Debian Jessie. Mein Projekt enthält .cpp-Dateien in '/ root/dev/Practice/src /' und einen einzelnen Header (FileWriter.h) in '/ root/dev/Practice/include /'. Die Kompilation der beiden Objektdateien funktioniert, aber die Verknüpfung mit einer ausführbaren Datei beschwert sich über undefinierte Referenz auf main(), obwohl ich tatsächlich eine scheinbar gültige in main.cpp definiert habe.g ++ Link-Fehler: 'undefinierter Verweis auf' Haupt '
Hier ist die Ausgabe von meinem Make-Datei (die in der Wurzel '/ root/dev/Praxis /' Verzeichnis):
g++ -c -g -Wall -o src/FileWriter.o src/FileWriter.cpp g++ -c -g -Wall -o src/main.o src/FileWriter.cpp g++ src/FileWriter.o src/main.o -o bin/Practice /usr/lib/gcc/i586-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o: In function '_start'" /build/glibc-J1NNmk/glibc-2.19/csu/../sysdeps/i386/start.S:111: undefined reference to 'main' collect2: error: ls returned 1 exit status Makefile:10: recipe for target 'bin/Practice' failed
Hier ist der Inhalt meiner main.cpp-Datei:
#include <string>
#include <iostream>
#include "/root/dev/Practice/include/FileWriter.h"
int main() {
std::cout << "Hello!" << std::endl;
FileWriter * fw = new FileWriter("foofile");
fw->AddLine("CRAP!");
fw->AddLine("NO!");
return 0;
}
Mein FileWriter.h:
#ifndef FILEWRITER_H_
#define FILEWRITER_H_
#include <string>
#include <iostream>
class FileWriter{
public:
FileWriter(std::string);
~FileWriter();
void AddLine(std::string);
private:
std::string fileLocation;
std::ofstream *filestream;
};
#endif /* FILEWRITER_H_ */
... und meine FileWriter.cpp:
#include "/root/dev/Practice/include/FileWriter.h"
#include <fstream>
// g++ linker error if 'inline' not included - why?
inline FileWriter::FileWriter(std::string fileName)
{
this->fileLocation = fileName;
const char * x = this->fileLocation.c_str();
this->filestream = new std::ofstream();
this->filestream->open(x, std::ios::out | std::ios::app);
}
inline FileWriter::~FileWriter()
{
this->filestream->close();
}
inline void FileWriter::AddLine(std::string line)
{
*this->filestream << line << std::endl;
}
Warum das Fluchen? Es kann frustrierend sein, aber bitte unterlassen Sie es in öffentlichen Posts – Li357
@AndrewL Er bereitete diese Worte vor, um zu sagen, wenn er erkennt, was das Problem ist ... –
Das ist besser: ^) – Li357