c++ - 我该如何解决这个奇怪的 c++ std map 问题?
问题描述
我写了一些这样的测试代码:
#include <iostream>
#include <map>
#include <string>
using namespace std;
using TEST_OBJ = std::map<std::string, std::string>;
class ABB
{
public:
ABB(const TEST_OBJ & src) : m_src(src) {}
public:
void func() { std::cout << "hello"; }
private:
TEST_OBJ m_src;
};
int main()
{
TEST_OBJ o;
ABB a(TEST_OBJ(Afdafdsaa));
return 0;
}
- 编译器 g++ 使用未定义的变量“Afdafdsaa”成功编译了这段代码</li>
- g++ typeid(a).name 告诉我变量“a”是一个函数
有谁能够帮助我?
解决方案
不完全确定你在问什么。这个问题在使代码工作的意义上是不可解决的,因为Afdafdsaa
它是未定义的。
但是,如果您想获得更合理的错误,那么最佳实践是使用 C++ 初始化程序语法。基本问题似乎是声明a
被解读为函数声明,而不是对象声明。这是因为在这两种情况下都使用了圆括号。
使用初始化语法,大括号用于明确我们正在处理初始化。
因此,将有问题的行更改为:
ABB a{ TEST_OBJ{Afdafdsaa} };
你会得到一个明显的错误。
这个想法是养成一直使用花括号进行初始化的习惯。如果一切正常,它们就像圆括号一样工作,但是当出现问题时,这意味着编译器可以更好地理解你想要做什么。
推荐阅读
- matlab - 绘制符号傅立叶级数
- powershell - 提取并保存特定的用户信息。foreach 中的引用
- html - 带有 .NET Core 的图像标签上的 data-src-retina
- angularjs - Alasql 在 angularjs 控制器中不起作用
- javascript - 仅在 Safari 中发布 jQuery ajax 时出现 400 错误请求
- python - 使用构造解析索引列表
- php - Symfony4 [API] 错误 500
- django - Django:通过 save() 连接两个模型
- android - FirebaseRecycler 如何不显示最后一个
- jquery - 编辑内联数据表