У меня есть 3 файла для компиляции с G ++, основной файл выглядит так:
//main.cpp
#include "test.hpp"
int main(int argc,char** args) {
//
}
Второй файл — это заголовочный файл:
//test.hpp
namespace shared {
class test {
//constructor
test();
};
}
Последний файл является файлом кода для test.hpp
//test.cpp
shared::test::test() {
//
}
И я компилирую с использованием G ++ следующим образом:
g++ -c main.cpp test.cpp
Однако G ++ жалуется на неопределенный идентификатор «shared» в файле «test.cpp». В командной строке я уже передаю файл ‘main.cpp’, в который входит файл заголовка. Как это исправить? Я только хочу, чтобы все ‘# include были в main.cpp, а не где-либо еще.
добавлять #include "test.hpp"
в начале test.cpp
,
Компилятор не заботится о порядке файлов в командной строке. Это влияет только на компоновщик.
Также обратите внимание, что обычным способом компиляции многофайловых проектов является компиляция каждого из них в разные подобъекты, например:
g++ main.cpp -o main.o
g++ test.cpp -o test.o
ld main.o test.o -o program[.exe]
Это позволяет перекомпилировать только те файлы, которые действительно изменились. Если вы подумаете об этом некоторое время, вы обнаружите, что .cpp
файл может содержать много заголовков без проблем; однако время компиляции увеличится, когда в ваших заголовках появится много заголовков. Предварительные декларации могут помочь решить эти проблемы, но с вашим простым примером будет работать простое решение.
Ты должен сказать #include "test.hpp"
в вашем test.cpp
файл. Объявление пространства имен должно быть известно.