c++中的编译错误
compilation error in C++
我在c++中有以下代码,我得到了编译错误:
a.cpp: In member function `virtual void Derived<T, D>::run(T&)':
a.cpp:13: error: expected primary-expression before "int"
a.cpp:13: error: expected `;' before "int"
请帮我找出这里出了什么问题。非常感谢。
#include <iostream>
template<typename T> struct Base
{
virtual void run( T& ){}
virtual ~Base(){}
};
template<typename T, typename D> struct Derived : public Base<T>
{
virtual void run( T& t )
{
D d;
d.operator()<int>();//nor does d.operator()<T>(); work
}
};
template<typename T> struct X
{
template<typename R> X(const R& r)
{
std::cout << "X(R)" << std::endl;
ptr = new Derived<T,R>();
}
X():ptr(0)
{
std::cout << "X()" << std::endl;
}
~X()
{
if(ptr)
{
ptr->run(data);
delete ptr;
}
else
{
std::cout << "no ptr" << std::endl;
}
}
Base<T>* ptr;
T data;
};
struct writer
{
template<typename T> void operator()()
{
std::cout << "T "<< std::endl;
}
};
int main()
{
{
writer w;
X<int> xi1((writer()));
}
return 0;
};
在Derived<>::run()
中,更改
d.operator()<int>();
d.template operator()<int>();
有关详细信息,请参阅本FAQ:->template
、.template
和::template
的语法是关于什么的?
当使用Visual Studio 2008附带的Microsoft c++ Compiler version 15.00.21022.08编译时,您的原始版本可以工作,并伴有以下消息:
C:Program FilesMicrosoft Visual Studio 9.0VCINCLUDExlocale(342) :
warning C 4530: C++ exception handler used, but unwind semantics are not enabled.
Specify /EHsc
Microsoft (R) Incremental Linker Version 9.00.21022.08 Copyright (C) Microsoft Corporation. All rights reserved.
/out:a.exe a.obj
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译