使用派生类可以构建的构造函数来实现抽象基类。我在编译代码时遇到麻烦,对于使用命名空间std事先致歉;这是我的作业中必需的。
我尝试了标题保护,并检查了包含代码。我将文件分为主文件(Assn2),抽象基类(S2D).h和.cpp文件。
在主文件Assn2中
new_df <- select(old_df, dtx1, dtx2, (...), dtx20)
在S2D.h之内
#include <iostream>
#include <string>
#include <fstream>
#include "S2D.h"
在S2D.cpp内
#ifndef _S2D_H_
#define _S2D_H_
#include <iostream>
#include <string>
using namespace std;
class ShapeTwoD {
private:
string name;
bool containsWarpSpace;
public:
ShapeTwoD();
ShapeTwoD(string, bool);
这是我收到的错误。
#include <iostream>
#include <string>
#include "S2D.h"
using namespace std;
class ShapeTwoD {
ShapeTwoD::ShapeTwoD() {
name = " ";
containsWarpSpace = false;
}
ShapeTwoD::ShapeTwoD(string Name, bool ContainsWarpSpace) {
name = Name;
containsWarpSpace = containsWarpSpace;
}
};
只是一个后续问题,我试图基于此抽象基类实现派生类。我试图基于这些抽象构造函数创建具有更多参数的派生类构造函数。
例如。
S2D.cpp:7:7: error: redefinition of ‘class ShapeTwoD’
class ShapeTwoD {
^~~~~~~~~
In file included from S2D.cpp:3:
S2D.h:7:7: note: previous definition of ‘class ShapeTwoD’
class ShapeTwoD {
^~~~~~~~~
make: *** [S2D.o] Error 1
我想知道我用Java教过的这个概念是否可以在C ++中使用?
答案 0 :(得分:2)
在S2D.cpp内
#include <iostream>
#include <string>
#include "S2D.h"
using namespace std;
class ShapeTwoD {// delete this line
ShapeTwoD::ShapeTwoD() {
name = " ";
containsWarpSpace = false;
}
ShapeTwoD::ShapeTwoD(string Name, bool ContainsWarpSpace) {
name = Name;
containsWarpSpace = containsWarpSpace;
}
};// delete this line