Пожалуйста, помогите со следующим вопросом о компиляции и компоновке C ++ и g ++.По сути, у меня есть 2 класса в 2 разных файлах, и я могу скомпилировать их, но когда я пытаюсь связать, один класс не видит методы другого, хотя я связываю оба.Порядок объектных файлов в этом случае не помогает.
Кажется, проблема связана с конструктором не по умолчанию, который принимает параметр.
Я вычеркнул и воспроизвел проблему в следующем простом коде:
Файл: a.cpp :
#include <iostream>
class A
{
public:
int my_int;
A(int i) {
my_int = i;
std::cout << "A";
}
};
Файл: a.hpp:
#ifndef __A_H_
#define __A_H_
class A
{
public:
A(int i);
};
#endif
Файл b.cpp:
#include <iostream>
using namespace std;
#include <a.hpp>
class B
{
public:
int my_int;
B(int i) {
my_int = i;
A a(i);
cout << "B\n";
}
};
int main(int argc, char* argv[])
{
B b(5);
cout << "hello world: ";
cout.flush();
return 0;
}
Команды, которые я использую для сборки:
g++ -c -I. a.cpp
g++ -c -I. b.cpp
g++ -o c_test a.o b.o
Поочередно я пробовал каждыйиз них:
g++ -o c_test b.o a.o
g++ -I. -o c_test a.cpp b.cpp
g++ -I. -o c_test b.cpp a.cpp
Ошибка, которую я получаю в любом из приведенных выше сценариев ссылок:
b.o: In function `B::B(int)':
b.cpp:(.text._ZN1BC1Ei[B::B(int)]+0x1c): undefined reference to `A::A(int)'
collect2: ld returned 1 exit status
Заранее благодарим за любую информацию.
(извините, если это повторное сообщение - я думал, что опубликовал его и не вижу ...)