gpt4 book ai didi

c++ - 程序可以在 Mac 上编译,但不能在 Linux 上编译。获取错误 : converting to from initializer list

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:37 24 4
gpt4 key购买 nike

我有一个程序可以在我的 mac 上成功编译,但是当我在我的 linux 桌面上尝试时它不能。相反,我收到以下错误:

plot.cpp:12:63: error: converting to ‘std::tuple<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >’
from initializer list would use explicit constructor
‘constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...)
[with _UElements = {const char (&)[4], const char (&)[6], const char (&)[6]};
<template-parameter-2-2> = void; _Elements = {std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >}]’

plot.cpp 的 12 看起来像这样:

vector<tuple <string, string, string> >{
{"yes", "Agree", "Empty"}, {"no", "Disagree", "Empty"}},

此 vector 在 header.h 中初始化,此处:

class Menu
{
std::string _name, _situation, _excuse;
std::vector<std::tuple <std::string, std::string, std::string>> _choices;
std::vector<std::string> _items;

public:
Menu(const std::string &name,
const std::string &situation,
const std::string &excuse,
const std::vector<std::tuple <std::string, std::string, std::string>> &choices = std::vector<std::tuple <std::string,std::string, std::string> >{},
const std::vector<std::string> &items = std::vector<std::string>{});
virtual ~Menu ();
const bool operator==(const std::string &name);
const std::string& Explain_Choice();
const void Enter_String();
std::string choice;
std::string ItemChoice;
const void Present_Choice() ;
const void No_Choice();
};

我环顾四周,我怀疑错误来自 header.h 中我说 &choices = 的行。然而,我尝试以不同的方式初始化它并没有奏效。

我有两个问题。首先,为什么这段代码可以在我的 mac 上编译但不能在 linux 上编译,其中一个编译器不知何故“错误”?其次,关于如何更改我的代码以允许它在 Linux 机器上编译,是否有任何建议。

最佳答案

这里有点可疑:

         ...
const std::string &excuse,
const std::vector<std::tuple <std::string, std::string, std::string>> &choices = std::vector<std::tuple <std::string,std::string, std::string> >{},
const std::vector<std::string> &items = std::vector<std::string>{});
...

我知道您可以使用默认的 const 参数通过引用传递,但这看起来确实有代码味道。

根据错误消息,第二行似乎是您的错误来源。在这种情况下,重载构造函数而不是使用这些特定的默认参数可能更好。

This answer有关于此特定错误的更多信息(unordered_map,但原理和解释是相同的)。

总之,这可能是编译器使用的默认 C++ 标准之间的差异。 g++使用 std=c++11默认情况下,不确定 OSX 编译器使用什么。您可能需要传入 std=c++14g++std::vector<std::tuple<...> > 获取更智能的默认构造函数.

关于c++ - 程序可以在 Mac 上编译,但不能在 Linux 上编译。获取错误 : converting to from initializer list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395452/

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