gpt4 book ai didi

c++ - 为什么下面的代码在 MSVC 中不能编译,但在 g++ 中可以编译?

转载 作者:行者123 更新时间:2023-12-02 19:01:45 25 4
gpt4 key购买 nike

我尝试在 main 中使用带有冒号的构造函数初始值设定项列表,但它无法在 Microsoft Visual Studio 2019 中编译(错误:标识符“name”未定义且需要“}”),但在 Linux 中的 g++(版本 10.2.0)中编译并打印输出没有任何问题。

我也尝试过不同版本的MSVC,比如C++14、C++17,但没有结果。我知道 C++11 的所有可能的初始化,但我必须使用带有冒号 (:) 的初始化。

有没有办法在MSVC中做到这一点?

提前致谢!

#include <string>
#include <iostream>

class Spell {
private:
std::string name;
std::string action;

public:
Spell(std::string name, std::string action) : name(name), action(action) {}

void print() {
std::cout << name;
}
};

int main() {

Spell* spell = new Spell{ name : "test", action : "lol" }; //HERE
spell->print();
}

最佳答案

该语法是非标准 GNU 扩展,因此任何版本的 Microsoft Visual C++ 都不支持(并且可能永远不会支持)。

指定初始化器在 C++20 中已标准化,但语法不同,并且它们仅可用于聚合初始化。等效的标准指定初始值设定项语法为 Spell{.name = "test", .action = "lol"}。但在这种情况下这也不起作用,因为 Spell 不是聚合,因为它具有私有(private)数据成员和用户定义的构造函数。

关于c++ - 为什么下面的代码在 MSVC 中不能编译,但在 g++ 中可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65472628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com