2016-02-26 2 views
-2

У меня есть два класса первый содержит-структуру вот что в Ачиспользовать-структуру из класса, чтобы построить еще один класс

class A 
{ 
public: 
A(); 
struct structname 
{double a;....}; 
}; 

, и я хочу использовать эту структуру в качестве аргумента конструктора B

#include "A.h" 
B::B(A::structname data) 
{ 
} 

, но я получил сообщение об ошибке: «structname» в «класса а» не называет тип

чем проблема?

подробнее: Два класса находятся в другом файле .cpp. В a.cpp и B.cpp: Я просто #include в хиджры и B.h В B.h:

class A; 
class B 
{ 
public: 
B(A::structname data); 
} 

реально:

-структуру
struct structname 
{ 
std::vector<double> a={0,0,0}; 
std::vector<double> B={0,0,0}; 
std::vector<double> c={0,0,0}; 
std::vector<double> d={0,0,0}; 
} 
+0

Я надеюсь, что '....' не находится в реальной программе. –

+0

Это вполне возможно, см. Http://ideone.com/aveqY9, ошибка должна быть где-то еще. Может быть, вы перепутали свои предложения? – Anedar

+0

@ColinBasnett Может быть, CHOCOLEO экспериментирует с вариационными структурами. – user4581301

ответ

1
class A 
{ 
    public: 
    A(); 
     struct structname 
     { 
      std::vector<double> a={0,0,0}; 
      std::vector<double> B={0,0,0}; 
      std::vector<double> c={0,0,0}; 
      std::vector<double> d={0,0,0}; 
     }; 
}; 
class B 
{ 
    public: 
    B(A::structname data); 
}; 

Просто форматировать Ваш код. Вы увидите все свои ошибки.

+0

Да, я тоже это сделал , все еще не может работать – CHOCOLEO

+0

Всегда формируйте свой код. Это очень полезно и избавляет вас от глупых ошибок. Если вы используете C++ 11 и заголовки в порядке, не должно быть ошибок. –

0

К сожалению, вы являетесь сторонником объявления A в B.h (это то, что я читал из ваших фрагментов). Если вы переадресовываете A, компилятор знает только, что существует какой-то тип с именем A, относящийся к типу класса. Он не знает о A::structname.

Сделайте свое объявление в обратном направлении или просто избегайте вложенных типов.

Смежные вопросы