Intereting Posts
Как обнулить массив в O (1)? Ошибка отладки -Abort () Значение круглых скобок в decltype ((c))? Как определить базовый метод, только если производный class не определяет метод с тем же именем Поиск библиотеки баз данных C ++, которая работает с Visual Studio 2008/2010 Как отключить оптимизацию tailcall в gcc Отображение значений графика при наведении мыши. – Обнаружение точек рассеяния Почему я не получаю правильный результат при вычислении показателя с помощью ^ в C ++? добавлять и вычитать ребра в графе через список смежных вершин Конструктор / деструктор по умолчанию вне classа? Что самое близкое в C ++ для ретроактивного определения суперclassа определенного classа? В чем разница между floor и duration_cast? ‘if’ с параметрами шаблона или SFINAE является предпочтительным? c ++ – Назначение нулевой строки Как вы можете убрать парсер yaml-cpp от удаления комментариев?

как связать файлы заголовков в c ++

Я новичок в программировании на C ++ с файлами заголовков. Это мой текущий код:

//ah #ifndef a_H #define a_H namespace hello { class A { int a; public: void setA(int x); int getA(); }; } #endif //a.cpp #include "ah" namespace hello { A::setA(int x) { a=x; } int A::getA() { return a; } } //ex2.cpp #include "ah" #include using namespace std; namespace hello { A* a1; } using namespace hello; int main() { a1=new A(); a1->setA(10); cout<getA(); return 1; } 

Когда я пытаюсь скомпилировать его с g++ ex2.cpp , я получаю эту ошибку:

 In function `main': ex2.cpp:(.text+0x33): undefined reference to `hello::A::setA(int)' ex2.cpp:(.text+0x40): undefined reference to `hello::A::getA()' collect2: ld returned 1 exit status 

Почему это не работает, и как я могу это исправить?

Вы не связываете файлы заголовков. Вы связываете файлы объектов , которые создаются путем компиляции файлов .cpp . Вам необходимо скомпилировать все исходные файлы и передать результирующие объектные файлы в компоновщик.

Из сообщения об ошибке кажется, что вы используете GCC. Если это так, я думаю, вы можете сделать
g++ ex2.cpp a.cpp
скомпилировать оба .cpp файла и вызвать компоновщик с результирующими объектными файлами.

Вам необходимо скомпилировать и связать оба исходных файла, например:

 g++ ex2.cpp a.cpp -o my_program 

Вам необходимо скомпилировать и связать оба файла источника ( .cpp ):

 g++ -Wall -pedantic -g -o your_exe a.cpp ex2.cpp 

В настоящее время вы компилируете и связываете только ex2.cpp но этот файл использует вызовы classа def и функции, присутствующие в a.cpp поэтому вам нужно скомпилировать и связать a.cpp а также:

 g++ ex2.cpp a.cpp 

Вышеприведенная команда скомпилирует исходный файл ( .cpp ) в объектные файлы и свяжет их, чтобы дать вам исполняемый файл a.out .