以下代码是我的C ++类幻灯片的一部分。 IntelliSence给了我错误,我不知道为什么。不知道为什么它不喜欢构造函数和析构函数。有人可以帮忙吗?
class Vehicle {
friend void guest();
private:
string make;
string model;
int year;
public:
void Vehicle();
void Vehicle(string, string, int);
void ~Vehicle();
string getMake();
}
void guest() {
cout << make;
}
1) IntelliSense: member function with the same name as its class must be a constructor
2) IntelliSense: member function with the same name as its class must be a constructor
3) IntelliSense: return type may not be specified on a destructor
答案 0 :(得分:11)
构造函数和析构函数没有返回类型!应该是:
Vehicle();
Vehicle(string, string, int);
~Vehicle();
您需要将参数传递给您的函数:
void guest(const Vehicle &v)
{
cout << v.make; //friend allows you to access 'make' directly
}
当然,您必须相应地更改friend
声明
在课程结束时不要忘记;
修改强>
有效的完整代码:
class Vehicle {
friend void guest(const Vehicle &v);
private:
string make;
string model;
int year;
public:
Vehicle() {}
Vehicle(string make, string model, int year) : make(make), model(model), year(year) {}
~Vehicle() {}
string getMake() const {return make;}
};
void guest(const Vehicle &v) {
cout << v.make;
}
int main()
{
guest(Vehicle("foo", "bar", 10));
return 0;
}
答案 1 :(得分:3)
如果您理解错误消息,那么错误消息实际上非常好。
void Vehicle();
因为“方法”与类名相同,所以Intellisense认为它应该是一个construtor。这是正确的!构造函数没有返回类型,因此请执行:
Vehicle();
类似地:
void Vehicle(string, string, int);
似乎也是一个构造函数,因为“method”的名称与类相同。仅仅因为它有参数并没有使它变得特别。它应该是:
Vehicle(string, string, int);
解构器也没有返回类型,所以
void ~Vehicle();
应该是:
~Vehicle();
答案 2 :(得分:1)
构造函数和析构函数没有返回类型。只需删除那些,您的代码应该编译。有返回类型
void Vehicle();
告诉编译器你要声明一个名为Vehicle()的函数,但因为它与该类的名称相同,所以除非它是一个构造函数(没有返回类型),否则它是不允许的。错误消息告诉您在这种情况下您的问题到底是什么。