在c+中定义默认值+;建造师? 长期java程序员,最近第一次切换到C++。

在c+中定义默认值+;建造师? 长期java程序员,最近第一次切换到C++。,c++,C++,我试图为一个Person类提供几个构造函数。我对人的定义如下: class Person { private: //stuff public: Person(std::string firstName, std::string lastName, int age); Person();//I want to define a constructor with no parameters, but NOT a default constructor! }; 我的实施: #i

我试图为一个
Person
类提供几个构造函数。我对人的定义如下:

class Person {

private:
//stuff

public:
    Person(std::string firstName, std::string lastName, int age);
    Person();//I want to define a constructor with no parameters, but NOT a default constructor!

};
我的实施:

#include "Person.h"

Person::Person(std::string firstName, std::string lastName, int age)
    : firstName(firstName), lastName(lastName), age(age)
{
}

Person::Person()//no errors here
    : firstName("default first"), lastName("default last"), age(0)
{
}
最后,我的主要职能是:

int main() {

    Person p1 = Person("Chuck", "Norris", 55)//Variable constructor
    Person p2 = Person();//SHOULD invoke no-args constructor
    return 0;
}
但是,当我尝试使用no args构造函数实例化p2时,会出现以下错误:

应为“;”,在这种情况下没有意义。我尝试了
人p2,同一问题


如何调用C++中的无ARGS构造函数,使用用户定义的默认值?

您丢失了<代码>;<代码>在p1之后

int main() {

    Person p1 = Person("Chuck", "Norris", 55) <-HERE
    Person p2 = Person();//SHOULD invoke no-args constructor
    return 0;
}
intmain(){

人P1=人(“恰克·巴斯”,“诺里斯”,55),你在第一行中丢失了<代码>;<代码> >“代码>人(“恰克·巴斯”,“诺里斯”,55)< /C++ >,所以它确实有意义。构造函数和默认构造函数。不管怎样,默认构造函数的调用完全没有任何问题。您忘记了在前一行中执行某些操作。@EtienDemartel嗯,这完全是令人尴尬的。要定义默认参数,请为最后一个参数设置
=
和适当的右值constexpr。毕竟下面的参数必须指定默认值。关于“定义一个没有参数的构造函数,但不是默认构造函数”这句话——一个可以在没有参数的情况下调用的构造函数是默认构造函数。这让人尴尬。