相关疑难解决方法(0)

我对值初始化的尝试被解释为函数声明,为什么不是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>
class test
{
    public:
        void fun()
        {
            int a(3);
            std::cout<<a<<'\n';
        }
    private:
        int s(3);    // Compiler error why???
};
int main()
{
    test t;
    t.fun();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序编译失败并出现以下错误.

11  9 [Error] expected identifier before numeric constant

11  9 [Error] expected ',' or '...' before numeric constant
Run Code Online (Sandbox Code Playgroud)

为什么?是什么原因?关于类数据成员初始化的C++标准是什么意思?非常感谢您的帮助.谢谢

c++ initialization language-lawyer

6
推荐指数
1
解决办法
520
查看次数

错误:数字常量前应有';',','或')

我正在制作一个堆栈类,并试图使其成为对象并在另一个类中使用它。但是,它提到存在错误。这是我在类中初始化堆栈对象的代码:

class functions{
public:
int m[5];
int c=0;
stack_x mem(5);
Run Code Online (Sandbox Code Playgroud)

c++ stack class

-12
推荐指数
1
解决办法
74
查看次数

标签 统计

c++ ×3

class ×1

initialization ×1

language-lawyer ×1

stack ×1