Visual Studio给出了关于模糊actor的错误
Visual Studio gives error about ambiguous ctor
我被困在VS 2013的编译器错误,我的自定义类有一个模糊错误,但它的工作没有模糊的std::vector
#include <initializer_list>
#include <vector>
using namespace std;
class MyArray
{
public:
std::vector< int > values;
MyArray(int s) : values(s) { }
MyArray(std::initializer_list< int >list) { values = list; }
};
int main ()
{
vector<int> vx({9,8,7}); // Works
MyArray mx({9, 8, 7}); // Works
vector<int> vy({9}); // Works
MyArray my({9}); // VS-compiler complains about ambiguity
MyArray mz(std::initializer_list<int>{9}); // Works
}
当然,我可以通过显式地添加类型:MyArray my(std::initializer_list<int>{9})
来修复歧义,但这非常不方便。是否有一种方法来编写构造函数,以便VS不会抱怨我的类的歧义?
由于std::vector
没有给出歧义错误,因此看起来应该是可能的
似乎是MS vc++ 2013编译器的错误。
根据c++标准(13.3.1.7 Initialization by list-initialization, p.#1)
—最初,候选函数是初始化列表类T的构造函数(8.5.4)和实参列表由作为单个参数的初始化列表。
-如果没有找到可行的初始化列表构造函数,则重载再次执行解析,其中所有候选函数都是类T的构造函数和实参列表由初始化列表的元素。
当在你的类中找到这样的构造函数时,它将被调用。
至少这个代码是用GCC编译的。
你可以写一个缺陷报告给微软。通常他们会提出一个解决问题的方法。不要忘记测试为项目设置MS语言扩展的代码。
尝试在其他构造函数中使用std::size_t
如果你把size_t作为你的vector模板参数,你会在同一条船上…但在此问题解决之前,这是其他情况下的一种变通方法。
#include <initializer_list>
#include <vector>
using namespace std;
class MyArray
{
public:
std::vector< int > values;
MyArray(std::size_t s) : values(s) { }
MyArray(std::initializer_list<int> list): values(list)
{}
};
int main()
{
int s({ 9 });
vector<int> vx({ 9, 8, 7 }); // Works
MyArray mx({ 9, 8, 7 }); // Works
vector<int> vy({ 9 }); // Works
MyArray my1(0);
MyArray my({ 9 }); // VS-compiler complains about ambiguity
}
相关文章:
- UE4在OnComponentBeginOverlap上铸造其他actor
- 方便地对C++中的所有字符串文字进行模糊处理
- 想要检测图像中的模糊,但无法正确
- 具有可分离内核的 2D 模糊卷积
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 如何组合许多连续的图像来模拟逼真的运动模糊?
- 在生成Actor(虚幻引擎4)时出现错误
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 多重继承导致虚假的模糊虚拟函数过载
- 带boost的过载模糊性:可选,解决方法
- 如何编译和运行一个新的 C++ Actor 框架项目?
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 使用 gcc 的模糊函数过载分辨率.为什么?
- 使用纯 c++ 模糊图像
- 无法使用 LoadObject() 函数编译 UE4 Actor。
- 将高斯模糊应用于灰度图像
- 正确用于模糊过滤器的内核
- 二项式模糊图像过滤器将内核应用于图像
- 来自Actor Call的返回价值
- Visual Studio给出了关于模糊actor的错误