未找到子类的成员

时间:2013-12-03 21:22:43

标签: c++ vector iterator

我认为我有数据切片的问题,但我不知道如何解决这个问题。 这里我只有一个子类(B),但实际上我有其他子类(没有j作为成员)。

这是我的代码:

helloworld.h

#ifndef HELLOWORLD_H_
#define HELLOWORLD_H_

class A {
public:
    A(): i(5) {}
    int i;
};

class B: public A {
public:
    B(): A(), j(2) {}
    int j;
};
#endif /* HELLOWORLD_H_ */

helloworld.cpp

#include <iostream>
#include <vector>
#include "helloworld.h"
using namespace std;
int main() {
    vector<A*> v;
    v.push_back(new B());
    v.push_back(new B());
    vector<A*>::iterator it = v.begin();
    ++it;
    cout << (*it)->j;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

除了@ interjay的评论:

C ++无法正常工作。您的A类不知道子类将具有哪种类型的变量,因此无法访问它们。您可以使用虚拟功能。

部首:

#ifndef HELLOWORLD_H_
#define HELLOWORLD_H_

class A {
public:
    A(): i(5) {}

    virtual int GetJ () const = 0 ;

private:
    int i;
};

int A::GetJ () const {
    // Throw exception or return an error.
}

class B: public A {
public:
    B(): A(), j(2) {}

    int GetJ () const ;

private:
    int j;
};

int B::GetJ () const {
    return j ;
}

#endif /* HELLOWORLD_H_ */

主:

#include <iostream>
#include <vector>
#include "helloworld.h"
using namespace std;
int main() 
{
    vector<A*> v;
    v.push_back(new B());
    v.push_back(new B());
    vector<A*>::iterator it = v.begin();
    cout << (*it)->GetJ () ;

    // Don't forget to clean up memory allocations,
    // or better yet, use smart pointers.
    return 0;
}