表达式必须具有类类型。不知道怎么解决

时间:2019-11-20 07:24:51

标签: c++

我是cpp语言的新手,我的代码有一个问题,我不知道该如何解决,我在这里查看了其他一些有关此错误的问题,但没有一个答案真正对我有帮助解决问题。 这是我的主要功能:

#include <iostream>
#include "Person.h"
#include <string> 


int main() {
    Person p2();
    Person p1();
    std::cout << p1.toString() << std::endl;
    return 0;
}

这是我的Person.h文件:

#ifndef PERSON_H_
#define PERSON_H_
#include <string>
class Person {
private:
    int age;
    std::string name;
    int numOfKids;
public:
    Person() {
        this->age = 0;
        this->name = "bob";
        this->numOfKids = 5;
    }
    Person(int agee, std::string namee, int numof);
    ~Person();
    std::string toString();


};

#endif // PERSON_H_

在主函数中,它标记p1.toString()并说“表达式必须具有类类型” 而且我不知道该怎么办,我尝试了很多事情,但没有一个起作用。

2 个答案:

答案 0 :(得分:1)

您写的这类陈述可能含糊不清: Person p2();

  1. (您想要的)变量p2,类型为Person,默认构造。
  2. (编译器认为)函数声明p2返回Persion的对象。

卸下括号或使用'{}'(c ++ 11)应该可以使您清楚:

Person p1{};
Person p2;

答案 1 :(得分:0)

各种要点:

Person(int agee, std::string namee, int numof);
~Person();
std::string toString();

这三个仅被声明,未定义。这将导致来自编译器的未解决的外部符号错误消息。 还更正p1和p2的变量声明。 使用此片段作为方向:

#include <iostream>

class Person
{
private:
    int age;
    std::string name;
    int numOfKids;
public:
    Person()
    {
        this->age = 0;
        this->name = "bob";
        this->numOfKids = 5;
    }

    Person(int agee, std::string namee, int numof)
    {
        // ToDo
    }

    ~Person()
    {
        // ToDo
    }

    std::string toString()
    {
        // ToDo
        return "";
    }
};

int main()
{
    Person p2;
    Person p1;
    std::cout << p1.toString() << std::endl;
    return 0;
}