错误C2011:'类类型重定义 - 基本继承

时间:2016-10-12 19:00:51

标签: c++ inheritance compiler-errors

以下是4节课,我学习了基本的c ++语法,而且男孩比我用过的其他语言更难,更宽容。我有一个主要类,基类" BaseArray"和两个子类" OrderedArray"和" UnorderedArray"。

Main.cpp的

#include <iostream>
#include "OrderedArray.cpp"
#include "UnorderedArray.cpp"

using namespace std;

int main() {


    system("PAUSE");
    return 0;
}

BaseArray.cpp

#include <iostream>

using namespace std;

class BaseArray {
    public:
        BaseArray::BaseArray() {

        }
};

OrderedArray.cpp

#include <iostream>
#include "BaseArray.cpp"

using namespace std;

class OrderedArray : public BaseArray {
    OrderedArray::OrderedArray() {

    }
};

UnorderedArray.cpp

#include <iostream>
#include "BaseArray.cpp"

using namespace std;

class UnorderedArray : public BaseArray {
    UnorderedArray::UnorderedArray() {

    }
};

我收到的错误如下,从在线侦察其他线程。我认为这可能与重复调用类有关。说实话,我不知道。如果有人能指出我的方向很好,那么事先谢谢!

error C2011: 'BaseArray':'class' type redefinition
error C2504: 'BaseArray':base class undefined

要修复此错误,我可以删除main.cpp顶部的其中一个包含,但是我需要这些包含以后创建对象并从子类调用函数。

1 个答案:

答案 0 :(得分:0)

您应该将基础数组放在标题中:

<强> BaseArray.h

#ifndef BASEARRAY_H_GUARD       // include guard
#define BASEARRAY_H_GUARD       // include guard  

                                // no using namespace !! 
                                // only includes needed for what's in the header
class BaseArray {
    public:
        BaseArray(); 
};

#endif                      // include guard

然后在cpp中只留下你班级的实施部分:

<强> BaseArray.cpp

#include <iostream>
#include "BaseArray.h"

using namespace std;

BaseArray::BaseArray() {     // no need class enclosing: the BaseArray:: prefix is sufficient
}

您可以将相同的原则应用于派生类:

<强> OrderedArray.h

#ifndef BASEARRAY_H_GUARD       // include guard
#define BASEARRAY_H_GUARD       // include guard  

#include "BaseArray.h"         // include only those that you need but all those that you need 

class OrderedArray : public BaseArray {   // requires BaseArray 
    OrderedArray(); 
};

#endif

<强> OrderedArray.cpp

#include <iostream>         // include headers that are needed for class implementation   
#include "OrderedArray.h"   // this should be self contained and provide
                            // evertyhing that is needed for the class itself

using namespace std;

OrderedArray::OrderedArray() {
}

然后你必须为UnorderedArray做同样的事情,最后,你必须调整你的main.cpp来包括.h而不是.cpp。而且你已经完成了。

最后一点:您的cpp源代码文件现在可以进行单独编译了。这意味着你不能再只编译main.cpp,希望它包含所有代码:你现在要编译4个cpp文件并将它们链接在一起。