VS2013 c++编译错误C3860的解决方法
VS2013 C++ Compiler Error C3860 workaround?
我用GCC 4.8.3 c++ 11编译了下面的代码,而MSVC2013在"DoSmth"的定义上抛出了以下错误:C3860:类模板名后面的模板实参列表必须按照模板形参列表
的顺序列出形参代码如下:
template <typename Bla3, typename Bla4>
class B
{
public:
struct X
{
int a;
int b;
};
B() {}
~B() {}
};
template<typename Bla1, typename Bla2, typename Bla3>
class A
{
public:
A() {}
~A() {}
void DoSmth(struct B<Bla1, Bla3>::X var);
};
template<typename Bla1, typename Bla2, typename Bla3>
void A<Bla1, Bla2, Bla3>::DoSmth(struct B<Bla1, Bla3>::X var)
{
}
正如我从错误链接(https://msdn.microsoft.com/en-us/library/h2wky6zt.aspx)中理解的那样,需要使用/c编译才能使此工作,但这会阻止自动链接。
有谁知道为什么必须按照相同的顺序放置模板参数的限制,如果有一种不改变参数顺序的方法?
这将工作,也可能使您的代码更具可读性
template <typename Bla3, typename Bla4>
class B
{
public:
struct X
{
int a;
int b;
};
B() {}
~B() {}
};
template<typename Bla1, typename Bla2, typename Bla3>
class A
{
public:
typedef B<Bla1, Bla3> B_Type;
typedef struct B_Type::X X_Type;
A() {}
~A() {}
void DoSmth(X_Type var);
};
template<typename Bla1, typename Bla2, typename Bla3>
void A<Bla1, Bla2, Bla3>::DoSmth(X_Type var)
{
}
相关文章:
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 是否有解决方法可以在 c++ 中为 short 定义用户定义的文字?
- 不为 emplace() 定义构造函数的解决方法
- 删除复制构造函数的 Intel 13.1.2 中不良C++行为的解决方法
- 函数模板部分专业化-有什么解决方法吗
- 带boost的过载模糊性:可选,解决方法
- 继承构造函数和其他变量的解决方法
- C++ 解决方法:"从类型"B*"的表达式初始化类型"C*&"的引用无效"
- 对前向声明类型进行unique_ptr的解决方法
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- 解决方法:QPixmap:在GUI线程之外使用pixmap是不安全的
- CreateProcessWithTokenW 的 cmdline 参数的最大长度是否有解决方法?
- C++双精度作为模板参数的解决方法
- 在参数相关查找之前进行模板替换的任何方法(或解决方法?
- CUDA 内核"Only a single pack parameter is allowed"解决方法?
- dlsym() 解决方法返回类型
- VS2017是否有VLA(可变长度阵列)支持解决方法
- 解决方法:未定义对"class::function"的引用
- 来自 Boost 的 JSON 解析器的警告 C4512 的解决方法