G ++ показывает ошибку о неопределенном пространстве имен

У меня есть 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, а не где-либо еще.

3

Решение

добавлять #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 файл может содержать много заголовков без проблем; однако время компиляции увеличится, когда в ваших заголовках появится много заголовков. Предварительные декларации могут помочь решить эти проблемы, но с вашим простым примером будет работать простое решение.

3

Другие решения

Ты должен сказать #include "test.hpp" в вашем test.cpp файл. Объявление пространства имен должно быть известно.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector