неопределенная ссылка на; функция public класса недоступна во время ссылки

0

Я пытаюсь создать простую программу, где я определил класс и включил его заголовок в Main. При связывании Linker жалуется на доступ к любой из функций-членов из класса:

: undefined reference to voxel::anyFunction

даже если функции являются общедоступными, а заголовки включены.

Первоначально я обнаружил проблему при создании объекта voxel - я перегрузил конструктор по умолчанию, но я выяснил, что проблема присутствует для любой функции класса voxel.

Вот некоторые фрагменты кода:

voxel.hpp

class voxel
{
  public:
    //here defined some member variables
  //ommited the constructor
  void fillMemberValuesWithDummy();//sets all members to some dummy value
};

voxel.cpp

#include "voxel.hpp"
void voxel::fillMemberValuesWithDummy()
{
  //does the assignment to member variables
}

main.cpp

#include <iostream>
#include <fstream>
using namespace std;
#include "voxel.hpp"
{
  voxel someVoxel;
  somevoxel.fillMemberValuesWithDummy();
}

Я полагаю, что это что-то очень глупо, я здесь (не), но можете ли вы мне что сказать?

  • 3
    какая ОС? Вы связываете объектный файл вокселей? Включая заголовок не достаточно.
  • 3
    Вы связываете voxel.o (или voxel.obj ) с main.o (или main.obj ) для создания исполняемого файла? Если нет, то это, вероятно, проблема.
Показать ещё 2 комментария
Теги:
class
function

1 ответ

1
Лучший ответ

Вам нужно связать все объектные файлы, чтобы получить исполняемый файл. Когда у вас есть только два ваших исходных файла, вы можете скомпилировать их напрямую:

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 если ОС не нуждается в нем.

  • 0
    да, это ответ - мне нужно освежить свою компиляцию / компоновку. благодарю вас !!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню