включает в себя пространство имен - PullRequest
0 голосов
/ 19 сентября 2010

Правильный ли следующий подход? Ну, я получаю ошибку компиляции.

a.hpp is

#include <iostream>

class a
{

public:

void classa_f();


};

a.cpp is

#include "a.hpp"


void a::classa_f()
{

   std::cout<< "a::classa_f\n";


}

main.cpp

#include <iostream>
namespace myname {
#include "a.hpp"
}

int main ()

{

   myname::a obj;
   obj.classa_f();

  return 0;

}

Я получаю следующую ошибку

g ++ main.cpp a.o /tmp/ccOOf5s7.o: в функции main': main.cpp:(.text+0x11): undefined reference to myname :: a :: classa_f () ' collect2: ld вернул 1 статус выхода

Ну, мой вопрос, возможно ли иметь только включения в пространстве имен, но не в реальной реализации, потому что я вижу, что компилятор ищет в пространстве имен определение функции. Чего на самом деле нет.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2010
namespace myname {
    #include "a.hpp"
}

Объявляет метод класса myname::a::classa_f, который явно не существует в вашей программе. Это недействительно.

0 голосов
/ 19 сентября 2010

В реализации вы должны

namespace myname
{
    void a::classa_f()
    {
        std::cout<< "a::classa_f\n";
    }
}

и, пожалуйста, удалите #include <iostream> из файла hpp, он также будет импортирован в пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...