相关疑难解决方法(0)

带空括号的默认构造函数

有没有什么好的理由在C++中调用默认构造函数时,一组空的圆括号(括号)无效?

MyObject  object;  // ok - default ctor
MyObject  object(blah); // ok

MyObject  object();  // error
Run Code Online (Sandbox Code Playgroud)

我似乎每次都自动输入"()".是不是有一个很好的理由不允许这样做?

c++ constructor c++-faq default-constructor most-vexing-parse

192
推荐指数
8
解决办法
3万
查看次数

我对值初始化的尝试被解释为函数声明,为什么不是A a(()); 解决这个问题?

Stack Overflow教给我的很多东西都是所谓的"最令人烦恼的解析",经典地用一条线来证明

A a(B()); //declares a function
Run Code Online (Sandbox Code Playgroud)

虽然这对于大多数人而言,直观地看起来是a类型对象的声明A,将临时B对象作为构造函数参数,它实际上是一个函数a返回的声明A,将一个指针指向一个返回的函数,它B本身不带参数.同样的线

A a(); //declares a function
Run Code Online (Sandbox Code Playgroud)

也属于同一类别,因为它代替一个对象,它声明了一个函数.现在,在第一种情况下,这个问题的通常解决方法是在其周围添加一组额外的括号/括号B(),因为编译器会将其解释为对象的声明

A a((B())); //declares an object
Run Code Online (Sandbox Code Playgroud)

但是,在第二种情况下,执行相同操作会导致编译错误

A a(()); //compile error
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么?是的我非常清楚正确的"解决方法"是将其更改为A a;,但我很想知道()第一个示例中的额外功能是什么,然后在重新应用它时不起作用第二个例子.A a((B()));变通办法是否是写入标准的特定异常?

c++

154
推荐指数
5
解决办法
2万
查看次数

构造对象和调用成员函数

这是我的代码

#include <iostream>

using namespace std;

class MyTestClass
{
    int MyTestIVar;

    public: 
        MyTestClass(void);
        int firstCallMethod(void);
        int secondCallMethod(void);
};

MyTestClass::MyTestClass(void)
{
    MyTestIVar = 4;
}
int MyTestClass::firstCallMethod(void)
{
    return secondCallMethod();
}
int MyTestClass::secondCallMethod(void)
{
    return MyTestIVar;
}

int main(int argc, char *argv[])
{
    MyTestClass mTC;
    cout << mTC.firstCallMethod() << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果使用

MyTestClass mTC();
Run Code Online (Sandbox Code Playgroud)

相反,它将禁止我调用任何成员函数并显示此错误

./experiment.cpp:在函数'int main(int,char**)'中:./ .experiment.cpp:31:14:error:请求'mTC'中的成员'firstCallMethod',这是非类型的'MyTestClass()'

我阅读了关于value-initialize等的帖子,但这个错误对我来说似乎不合逻辑.为什么会影响会员功能?

并且非常感谢:-)

c++

0
推荐指数
1
解决办法
119
查看次数