【发布时间】:2021-05-20 21:53:29
【问题描述】:
我必须从文件中读取并根据我正在读取的文件的行实例化对象。
文件格式为:
num1 RandomString RandomString num2 num3 num4<br>
num1 RandomString RandomString<br>
num1 RandomString RandomString num2 num3 num4<br>
num1 标识我需要实例化的对象类型。例如,如果 num1 是 1,那么我需要创建一个 dog 对象,如果是其他对象,那么我需要创建一个通用的 animal 对象。
下面的代码已经完成了一半。
注意:目前我还没有考虑将成员设为私有。目前不是优先事项。
#include <vector>
etc...
class Animal {
public:
int num1;
string 1;
string 2;
int num2;
int num3;
int num4;
std::string restOfTheLine;
Animal(fLine){
std::stringstream stream(fLine)
stream >> num1;
std::getline(stream, restOfTheLine);
getFunctions etc...
}
class Dog : public Animal{
}
int main(){
ifstream file("file.txt");
std::string line;
std::vector<Animal*> animals;
while(!file.eof()){
std::getline(file,line);
if(line[0]=='1'){
Dog* dog = new Dog(line);
animals.push_back(dog);
}
else{
Animal* animal = new Animal(line);
animals.push_back(animal);
}
std::cout << animals[2]->getNum2();
}
所以我正在检查该行的第一个字符是否为 1。如果是,则必须实例化一个 dog 对象。
当我编译它给我一个错误 - error:no matching function for call dog::dog,这显然是因为我没有在派生的狗类中写任何东西,因为我不确定如何处理它。
我有一个指向动物的指针类型的向量,那么如何使用继承添加指向狗的指针?
【问题讨论】:
-
与你的问题无关,但
while(!file.eof()){ std::getline(file,line); ... }is wrong,应该是while(std::getline(file,line)){ ... } -
如果这里没有向量,你会如何“接近它”?你会以完全相同的方式在这里“接近它”。目前尚不清楚您的问题是什么。 “接近它”过于含糊不清,无法给出具体、准确的答案。
-
我正在尝试填充狗对象的成员变量,但如果这样可以消除任何误解,我希望该狗对象成为动物向量的一部分?
-
建议:不要从所有成员
public开始,让访问更容易,而是从所有成员private开始,让调试更容易。 -
非常清楚您要做什么。完全不清楚的是您的具体问题是什么?一个很好的类比是:你说你想知道如何修理你的车,并澄清你正试图用你的车去城镇的另一边。好的,但具体来说,你的车出了什么问题?同样,您的具体 C++ 问题是什么?
标签: c++ inheritance vector