C ++ / несколько файлов с вектором указателей на объекты - PullRequest
1 голос
/ 19 декабря 2010

Основная идея этой проблемы должна иметь смысл, глядя на код ниже, но я попытаюсь объяснить.В основном у меня есть два класса, которые ссылаются друг на друга с помощью указателей, а затем эти классы находятся в двух отдельных заголовочных файлах.Программа работает только без той части, где в указатель Ah

#include <iostream>  
#include "A.h"  
#include "B.h"  

using namespace std;  
class a;  
class b;  

int main()  
{  
    a* oba = new a;  
    b* obb = new b;  

    oba->set(obb,9);  
    obb->set(oba,0);  


    cout<<oba->get()<<endl;  
    cout<<obb->get()<<endl;  
    delete obb;  
    delete oba;  

    return 0;  
}  

//This is the A.h, look for the comment in the code where the error occurred.

#ifndef _A  
#define _A  

#include "B.h"  
#include <vector>  

class b;  

class a  
{  
    private:  
        b* objb;  
        int data;  
        vector <b*> vecb;//this is not well liked by the compiler???  

    public:  

    void set(b* temp, int value);  
    int get();  
};  
void a::set(b* temp, int value)  
{  
    objb = temp;  
    data = value;  
}  
int a::get()  
{  
    return data;  
}  
#endif  



#ifndef _B  
#define _B  

#include "A.h"  
class a;  

class b  
{  
    private:  
        a* obja;  
        int data;  

    public:  
    void set(a* temp, int value);  
    int get();   
};  
void b::set(a* temp, int value)  
{    
    obja = temp;  
    data = value;  
}  
int b::get()    
{  
    return data;   
}  
#endif  
добавлен вектор указателей типа b

Ответы [ 3 ]

0 голосов
/ 19 декабря 2010

Qualify vector с пространством имен std.

class a
{
    ...
    std::vector<b*> vecb;
};
0 голосов
/ 19 декабря 2010

Я добавил std::vector <b*> vecb; к коду, впервые опубликованному, и он скомпилирован нормально.

0 голосов
/ 19 декабря 2010

Вы не должны #include "A.h" в вашем B.h, и наоборот, иначе вы получите циклические зависимости.

Попробуйте следующее:

(хиджры)

class B; // forward declaration
class A
{
    B* pb;
    ...
}

(a.cpp)

#include "A.h"
#include "B.h"
...

(B.h)

class A; // forward declaration
class B
{
    A* pa;
    ...
}

(B.cpp)

#include "A.h"
#include "B.h"
...

НТН.

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