C++ C++;对象声明和无默认构造函数(用户声明或隐式声明)

C++ C++;对象声明和无默认构造函数(用户声明或隐式声明),c++,constructor,default,C++,Constructor,Default,如果我有 class Something { public: Something(int whatever) : whatever_(whatever) {} private: int whatever_; } 那么当我在堆栈上创建一个对象时会发生什么呢 Something something; 由于没有默认构造函数?在符合条件的编译器上,您会得到一个编译错误 以下代码: class Something { public: Something(int whatever

如果我有

class Something
{
public:
    Something(int whatever) : whatever_(whatever) {}
private:
    int whatever_;
}
那么当我在堆栈上创建一个对象时会发生什么呢

Something something;

由于没有默认构造函数?

在符合条件的编译器上,您会得到一个编译错误

以下代码:

class Something
{
public:
    Something(int whatever) : whatever_(whatever) {}
private:
    int whatever_;
};

Something something;
使用gcc8.2编译时,会导致以下编译错误:

<source>:9:11: error: no matching function for call to 'Something::Something()' 
 Something something;
           ^~~~~~~~~    
<source>:4:5: note: candidate: 'Something::Something(int)'    
     Something(int whatever) : whatever_(whatever) {}    
     ^~~~~~~~~    
<source>:4:5: note:   candidate expects 1 argument, 0 provided    
<source>:1:7: note: candidate: 'constexpr Something::Something(const Something&)'    
 class Something    
       ^~~~~~~~~    
<source>:1:7: note:   candidate expects 1 argument, 0 provided    
<source>:1:7: note: candidate: 'constexpr Something::Something(Something&&)'    
<source>:1:7: note:   candidate expects 1 argument, 0 provided    
Compiler returned: 1
:9:11:错误:调用'Something::Something()'时没有匹配的函数
某物;
^~~~~~~~~    
:4:5:注:候选人:'Something::Something(int)'
某物(int-whatever):whatever(whatever){
^~~~~~~~~    
:4:5:注意:候选者需要1个参数,提供0个参数
:1:7:注:候选人:'constexpr Something::Something(const Something&)'
分类
^~~~~~~~~    
:1:7:注意:候选者需要1个参数,提供0
:1:7:注:候选人:“constexpr某物::某物(某物&&)”
:1:7:注意:候选者需要1个参数,提供0
返回的编译器:1

现场示例可访问。

您是否可以添加一个;在最后一次}之后重试?它为我编译。是的,一个拼写错误,已修复。@MartinF那么您使用的编译器、编译器版本和编译器选项是什么?问题是我在删除默认构造函数后没有进行干净的编译。它现在在抱怨。很抱歉