以下是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顶部的其中一个包含,但是我需要这些包含以后创建对象并从子类调用函数。
答案 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文件并将它们链接在一起。