7

以下代码是我的 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
4

3 回答 3

12

构造函数和析构函数没有返回类型!应该:

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;
}
于 2012-08-07T15:05:46.400 回答
3

如果您理解错误消息,则在这种情况下实际上非常好。

void Vehicle();

因为“方法”与类同名,所以您的 Intellisense 认为它应该是一个构造函数。这是正确的!构造函数没有返回类型,所以让它:

Vehicle();

相似地:

void Vehicle(string, string, int);

也似乎是一个构造函数,因为“方法”的名称与类相同。仅仅因为它有参数并不能使它特别。它应该是:

Vehicle(string, string, int);

解构器也没有返回类型,所以

void ~Vehicle();

应该:

~Vehicle();
于 2012-08-07T15:08:07.067 回答
1

构造函数和析构函数没有返回类型。只需删除这些,您的代码就可以编译。有返回类型

 void Vehicle(); 

告诉编译器您要声明一个名为 Vehicle() 的函数,但由于它与类同名,除非它是构造函数(没有返回类型),否则不允许这样做。错误消息准确地告诉您在这种情况下您的问题是什么。

于 2012-08-07T15:07:10.807 回答