gpt4 book ai didi

C++ 对默认构造函数的 undefined reference

转载 作者:行者123 更新时间:2023-11-27 22:43:43 24 4
gpt4 key购买 nike

我正在创建一个编译但无法链接的 C++ 11 程序。我已将错误(显示在本文底部)追踪到一行代码:

            m_equities[symbol] = temp;

其中 m_equities 定义为:

    map<string, EquityInDB> m_equities;

temp 是 EquityInDB 的一个实例。

有人可以解释为什么这一行代码会导致下面的链接器错误吗?看起来一行试图使用默认构造函数(没有)创建我的 EquityInDB 类的实例。我的 EquityInDB 类需要构造函数中的参数。

(注意:注释掉上面的一个赋值行可以编译所有内容)

g++ -o MetaStockDB main.o date.o tradingday.o equity.o metastockdb.o msfileio.o equityindb.o bytearray.o metastockdb.o: In function std::pair<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const,
EquityInDB>::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
0ul>(std::tuple<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&>&,
std::tuple<>&, std::_Index_tuple<0ul>, std::_Index_tuple<>)':
Makefile:254: recipe for target 'MetaStockDB' failed
/usr/include/c++/6.3.1/tuple:1586: undefined reference to
EquityInDB::EquityInDB()'

最佳答案

m_equities[symbol] 使用默认构造函数创建一个元素,如果该键的映射中没有元素。所以使用 operator[] 需要默认构造函数存在。

您应该改用insertstd::make_pair

std::map operator_at :

1: Inserts value_type(key, T()) if the key does not exist. [...] mapped_type must meet the requirements of CopyConstructible and DefaultConstructible. If an insertion is performed, the mapped value is value-initialized (default-constructed for class types, zero-initialized otherwise) and a reference to it is returned.

[...]Return value: Reference to the mapped value of the new element if no element with key key existed.`

关于C++ 对默认构造函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46046924/

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