C++类查询错误:" "左侧必须指向类/结构/联合
C++ classes query error : left of "" must point to class/struct/union
我正在尝试实现一个名为Person的类,该类由成员组成:姓名,性别和广告,
其中广告属于名为地址的类类型,由成员街道,电话和PObox组成。当我编译程序时,每当我尝试在任何 Person 实现中调用广告时,都会出现错误(尽管语法应该是正确的)。我已经附加了地址.h,person.h,个人的实现和地址文件的实现。
地址.h
#include<iostream>
class Address
{
public:
Address();
char* getstreet();
char* gettel();
int getpobox();
void setall(char *str , char *tel , int pobox);
void print();
/*~Address();*/
private:
char* street;
char* tel;
int POBox;
};
人.h
#include <iostream>
#include "address.h" // header file for the Address class
#include "gender.h" // header file for the Gender enum
using namespace std;
class Person
{
public:
Person();
Person(char *n, Gender *g, Address *ad);
Person(const Person &f);
void setName(char * n);
void setAds( Address *ad);
char *getName();
/*Address *getAds();*/
/*~Person();*/
void print();
private:
char *name;
Gender *gender;
Address *ads;
};
实施2.cpp
#include<iostream>
#ifndef address_h
#define address_h
#include"address.h"
using namespace std;
//IMPLEMENTATION OF ADDRESS FUNCTIONS
Address::Address()
{
street = "default street";
tel = "55555555";
POBox = 1315425;
}
char* Address::getstreet()
{
return street;
}
char* Address::gettel()
{
return tel;
}
int Address::getpobox()
{
return POBox;
}
void Address::setall(char *str , char *tel2 , int pobox)
{
street = str;
tel = tel2;
POBox = pobox;
}
void Address::print()
{
cout<<"Street : "<<street<<endl;
cout<<"Telephone : "<<tel<<endl;
cout<<"PO box : "<<POBox<<endl;
}
#endif
实施.cpp
#ifndef person_h
#define person_h
#include<string>
#include<iostream>
#include"address.h"
#include"person.h"
using namespace std;
//IMPLEMENTATION OF PERSON FUNCTIONS
Person::Person()
{
(*gender) = female;
name = "testname";
(*ads).setall("random adress","0503216532",95421);
}
Person::Person(char *n, Gender *g, Address *ad) //copy constructor
{
n = name;
g = gender;
ad->setall("cpyconstruct test","42324134",14925);
}
Person::Person(const Person &f)
{
name = f.name;
gender = f.gender;
ads = f.ads;
}
void Person:: setName(char * n)
{
n = "karim (TESTING SETNAME)";
}
void Person::setAds(Address *ad)
{
ads->setall("aus","04314013",14314);
}
char* Person::getName()
{
return name;
}
void Person:: print()
{
cout<<"Name : "<<name<<endl;
if(gender == 0)
{
cout<<"gender : male"<<endl;
}
else
cout<<"gender : female"<<endl;
ads->setall("hello","056323453",1995);
}
#endif
ads 是一个未初始化的指针,因此您无法使用它执行任何操作(例如,使用 -> 运算符)。
解决方案:在 Person 的 ctor 中使用 new 初始化;或者,更好的是,根本不使用指针。 你不需要一个。
class Person
{
...
Address ads;
};
Person::Person()
{
(*gender) = female;
name = "testname";
ads.setall("random adress","0503216532",95421);
}
。Crashmaster是对的:当你开始ads
工作时,你会得到Address成员的内存问题。 使用 std::string,它们也会得到处理。
相关文章:
- 如何将结构/联合数组的成员传递到函数中
- 错误 C2228 左侧'.setDay'必须具有类/结构/联合
- 在C++中为结构(联合)创建构造函数
- '.expression'左边必须有类/结构/联合
- C++错误 C2227:'->looseHealth'左侧必须指向类/结构/联合/泛型类型
- C 结构/联合到C#结构
- C++ 使用比较 - '.compare'左侧必须具有类/结构/联合
- 表达式必须具有类类型,'.x'左侧必须具有类/结构/联合
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- .BEGIN的左侧必须具有类/结构/联合
- 我的测试用例错误类/结构/联合
- C++ 异常情况下的错误 C2228(".val"的左侧必须具有类/结构/联合)
- 错误 C2228:".x"的左侧必须具有类/结构/联合
- 错误:C2228:左侧必须具有类/结构/联合
- 错误 C2228:".printStats"的左侧必须具有类/结构/联合
- '.getDrinkPrice'左边必须有类/结构/联合
- 通过反射在XML中的C/C++头文件中定义的可视化嵌套结构/联合
- 错误 C228:"必须多次具有类/结构/联合"的左侧
- 正在分析XML中C/C++头文件中定义的嵌套结构/联合
- 错误 C2228:'.Alloc'左侧必须具有类/结构/联合