我正在使用C来创建一个具有多态性的基本族 . 但是,我在编译时遇到错误,并且我不确定如何纠正它们(我说 class dependency
,因为父和子在创建另一个之前彼此依赖):
错误C2061:语法错误:标识符'父'错误C2143:语法错误:缺少';'在'*'之前错误C4430:缺少类型说明符 - 假定为int . 注意:C不支持default-int错误C2065:'parent':未声明标识符错误C2065:'name':未声明标识符错误C2614:'Child':非法成员初始化:'par'不是基数或成员错误C2065: 'par':未声明的标识符错误C2227:' - > addChild'的左边必须指向class / struct / union / generic类型错误C2065:'par':未声明的标识符错误C2227:' - > Name'的左边必须指向class / struct / union /泛型类型错误C2661:'Child :: Child':没有重载函数需要2个参数错误C2065:'par':未声明标识符错误C2227:' - > Name'左边必须指向class / struct / union /泛型
/* Polymorphism Family */
#include <iostream>
#include <vector>
class Child{
public:
Child(Parent* parent, char* name) : par(parent), Name(name){ par->addChild(this); };
Parent* par;
char* Name;
virtual void Speak(void){
std::cout << "I am a child, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
class Parent{
public:
Parent(char* name) : Name(name){};
char* Name;
std::vector<Child*> Children;
virtual void Speak(void){
std::cout << "I am a parent called " << Name << std::endl;
if(Children.size() == 0){
std::cout << "I have no children" << std::endl;
}
else{
std::cout << "I have " << Children.size() << " children:" << std::endl;
for(auto c : Children){
std::cout << c->Name;
}
}
}
void addChild(Child* child){
Children.push_back(child);
}
};
class Father : public Parent{
public:
Father(char* name) : Parent(name){}
void Speak(void){
std::cout << "I am a father called " << Name << std::endl;
if(Children.size() == 0){
std::cout << "I have no children" << std::endl;
}
else{
std::cout << "I have " << Children.size() << " children:" << std::endl;
for(Child* c : Children){
std::cout << c->Name;
}
}
}
};
class Son : public Child{
public:
Son(Parent* parent, char* name) : Child(parent, name){}
void Speak(void){
std::cout << "I am a son, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
int main(void){
Father* Dad = new Father("James");
Dad->Speak();
Son* John = new Son(Dad, "John");
John->Speak();
Dad->Speak();
delete[] Dad, John;
getchar();
return (0);
}
Edit: I have 2 errors now:
/* Polymorphism Family */
#include <iostream>
#include <vector>
class Parent;
class Child{
public:
Child(Parent* parent, char* name);
Parent* par;
char* Name;
virtual void Speak(void){
std::cout << "I am a child, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
class Parent{
public:
Parent(char* name) : Name(name){};
char* Name;
std::vector<Child*> Children;
virtual void Speak(void){
std::cout << "I am a parent called " << Name << std::endl;
if(Children.size() == 0){
std::cout << "I have no children" << std::endl;
}
else{
std::cout << "I have " << Children.size() << " child(ren):" << std::endl;
for(auto c : Children){
std::cout << c->Name << std::endl;
}
}
}
void addChild(Child* child){
Children.push_back(child);
}
};
Child::Child(Parent* parent, char* name){
Child::par = parent;
Child::Name = name;
par->addChild(this);
};
class Father : public Parent{
public:
Father(char* name) : Parent(name){}
void Speak(void){
std::cout << "I am a father called " << Name << std::endl;
if(Children.size() == 0){
std::cout << "I have no children" << std::endl;
}
else{
std::cout << "I have " << Children.size() << "child(ren):" << std::endl;
for(auto c : Children){
std::cout << c->Name << std::endl;
}
}
}
};
class Son : public Child{
public:
Son(Parent* parent, char* name) : Child(parent, name){}
void Speak(void){
std::cout << "I am a son, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
int main(void){
Father* Dad = new Father("James");
Dad->Speak();
Son* John = new Son(Dad, "John");
John->Speak();
Dad->Speak();
delete[] Dad, John;
getchar();
return (0);
}
1 回答
您的
Child
类使用尚未定义的Parent
类(不在代码上方,在Child
之前或在某些包含的文件中) . 要解决此问题,请在(或"above")Child
之前声明Parent
类 . 例如:希望这可以帮助 .
[已添加]以下是作者提问的代码示例:
输出online cpp editor