2015-06-12 5 views
-2

Я видел похожие ответы, но, похоже, я не могу решить мои, просто посмотрев на них, например (this или that).«ClassName» не называет тип

Итак, у меня это есть.

Ах

#ifndef INCLUDE_CLASS_NAME 
#define INCLUDE_CLASS_NAME 

#include <B.h> 

using namespace C; 

D::DPtr myvariable; <-- Error in here 

#endif 

В включают Bh У меня есть это:

namespace C{ 
namespace E{ 

class D 
{ 
    public: 
     typedef shared_ptr<D> DPtr; 
} 

} //end of namespace E 
} // end of namespace C 

Почему я получаю эту ошибку в указанной строке:

'D' does not name a type 

I я включая. h, который определяет класс. Что мне не хватает?

+1

Почему вы заявили 'myvariable' как' mutable'? Эта концепция применима только к членам класса. – Mikhail

+0

@ Михаэль да изменил это, я не смог скомпилировать до этого момента. – ghostrider

ответ

5

Символ D находится внутри пространства имен E, который находится внутри пространства имен C, поэтому полное имя C::E::D.

Так как:

  • Добавить E:: сослаться на D правильно:

    mutable E::D::DPtr myvariable; 
    
  • Объявить E в using директивы, а также:

    using namespace C::E; 
    
4

Вы пропустили пространство имен E ...

mutable E::D::DPtr myvariable; // should work 
0

Вы пытаетесь вызвать функцию, которая еще не существует в соответствии с препроцессором. Вам необходимо определить функции, прежде чем вы их назовете:

int mainFunction(){ 
    int foo(int bar){ //define function FIRST... 
     return bar; 
    } 
foo(42) //call it later. 
} 

Это должно избавиться от этой ошибки. Это не:

int mainFunction(){ 
    foo(42) //trying to call a function before it's declared does not work. 
     int foo(int bar){ 
     return bar; 
    } 
}