Я пытаюсь создать простую программу, где я определил класс и включил его заголовок в Main. При связывании Linker жалуется на доступ к любой из функций-членов из класса:
: undefined reference to voxel::anyFunction
даже если функции являются общедоступными, а заголовки включены.
Первоначально я обнаружил проблему при создании объекта voxel - я перегрузил конструктор по умолчанию, но я выяснил, что проблема присутствует для любой функции класса voxel.
Вот некоторые фрагменты кода:
class voxel
{
public:
//here defined some member variables
//ommited the constructor
void fillMemberValuesWithDummy();//sets all members to some dummy value
};
#include "voxel.hpp"
void voxel::fillMemberValuesWithDummy()
{
//does the assignment to member variables
}
#include <iostream>
#include <fstream>
using namespace std;
#include "voxel.hpp"
{
voxel someVoxel;
somevoxel.fillMemberValuesWithDummy();
}
Я полагаю, что это что-то очень глупо, я здесь (не), но можете ли вы мне что сказать?
Вам нужно связать все объектные файлы, чтобы получить исполняемый файл. Когда у вас есть только два ваших исходных файла, вы можете скомпилировать их напрямую:
g++ -o myprog.exe Main.cpp voxel.cpp
Если вы хотите разделить компиляцию и ссылку и сделать это следующим образом:
g++ -c -o Main.o Main.cpp
g++ -c -o voxel.o voxel.cpp
g++ -o myprog.exe Main.o voxel.o
Не стесняйтесь создавать соответствующий Makefile, который генерирует такие команды.
Удалите .exe
если ОС не нуждается в нем.
voxel.o
(илиvoxel.obj
) сmain.o
(илиmain.obj
) для создания исполняемого файла? Если нет, то это, вероятно, проблема.