Проблема со связыванием одного файла, содержащего определение пространства имен, с другим, использующим это пространство имен в C ++? - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть два файла, один из которых называется test.cpp, а другой - ani.cpp.

test.cpp выглядит следующим образом:

#include<iostream>

namespace Anirudh{

    void start(){
        std::cout<<"This is the start function of the namespace Anirudh\n";
    }
}

ифайл ani.cpp выглядит следующим образом

#include<iostream>

using namespace Anirudh;
int main(){

    start();
    return 0;
}

, и это то, что я делаю на терминале

anirudh@anirudh-Aspire-5920:~/Desktop/testing$ g++ -c test.cpp
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ g++ test.o ani.cpp 
ani.cpp:3: error: ‘Anirudh’ is not a namespace-name
ani.cpp:3: error: expected namespace-name before ‘;’ token
ani.cpp: In function ‘int main()’:
ani.cpp:6: error: ‘start’ was not declared in this scope
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ 

Этов первый раз я пытаюсь определить свое собственное пространство имен в C ++ и использую его в другом коде.Мой код работает после #include "test.cpp" в моем ani.cpp файле, но я хочу связать объектный код test.cpp с ani.cpp, а не включать его в ani.cpp. Я даже пробовал extern namespace Anirudh;но это не сработало.Конечно, есть правильный способ связать их, чего я сейчас не знаю.Поэтому, пожалуйста, просветите меня.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2011

Как насчет прототипирования функции а-ля:

namespace Anirudh {
    void start();
} // namespace Anirudh

int main(...){
//...
0 голосов
/ 14 февраля 2011

Если у вас нет заголовочного файла, то по крайней мере, вам нужно сделать: написать прототип вашей функции в ani.cpp перед вызовом как

using namespace Anirudh;

void Anirudh::start();

int main(){

    start();
    return 0;
}
0 голосов
/ 14 февраля 2011

В ani.cpp вы никогда не сообщали компилятору, что в программе есть namespace Anirudh где-то еще до выполнения using. Если вы привыкли к другим системам модулей, это, вероятно, кажется странным.

Что вы можете сделать, это объявить функцию namespace + до ее вызова, с этими строками перед using namespace in ani.cpp

namespace Anirudh{    
    void start();
}

Зачастую эти объявления заключаются в заголовок, но в этом простом примере это, вероятно, не требуется.

...