如何编译模板c++11,我可以c++14
how I can compile templates c ++ 11, I can c ++ 14
1
在c++14中,运行良好
//ar.h
#ifndef AR_H
#define AR_H
template<class T>
class ar {
public:
ar();
~ar();
int insertD(T value);
private:
protected:
};
#endif //AR_H
//ar.cpp
#include "ar.h"
template<class T>
int ar<T>::insertD(T value){
int testInsert = -1;
//..
//..
return testInsert;
}
//main.cpp
#include "ar.h"
#include "ar.cpp"
int main(int argc, char **argv){
arr<int> arrD;
arrD.insertD(1);//test
return 0;
}
这是在C++14中做到这一点的正确方法,只包括,只在main.cpp中包含ar.cpp?
更新
过了很长时间。。。我决定更改我的GNU并在另一个操作系统中进行测试,令我惊讶的是,示例1和示例3都是相同的,它们在C++14和C++11中都能很好地工作,也许这是我的编译器中的一个错误。
https://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_3.html
-pedantic有效的ISO C和ISO C++程序应该在有或没有这个选项的情况下正确编译(尽管很少有程序需要-ansi或指定所需ISO C版本的-std选项)。然而如果没有这个选项,某些GNU扩展和传统的C和C++功能也得到支持。有了这个选项,他们就会被拒绝。
-学究式的:与-ansi结合使用,这告诉编译器严格遵守ansi标准,拒绝任何符合不合规。
- 没有迂腐的c++14效果很好
- c++14与迂腐的工作很好
- c++11没有迂腐,不起作用
- c++11与迂腐的工作很好
从main中删除#include "ar.cpp"
。您定义了两次insert
。
C++11和C++14中的相关规则没有区别。您在测试运行之间做了一些与语言版本无关的不同操作。
我也建议不要称之为.cpp
。按照惯例,包含的任何都不应称为.cpp
。由于您需要将模板定义放在某个标头中,因此人们通常会将此类标头命名为.hpp
或类似.ipp
的名称,以使其脱颖而出。但.cpp
只是令人困惑;事实上,它似乎直接把你带入了这个问题。
您不应该包括任何.cpp文件,只应该包括.h文件。单独编译所有.cpp文件,只将它们链接在一起。生成文件示例:
CC=g++
ARGS=-Wall -pedantic
OBJFILES=ar.o
all: $(OBJFILES)
$(CC) $(ARGS) $(OBJFILES) main.cpp -o my.program
ar.o:
$(CC) $(ARGS) -c ar.cpp
相关文章:
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- C++11:我可以显式调用基类析构函数来销毁派生类吗
- 我可以在 c++11 中的 std::d eque 上使用 std::max_element() 吗?
- 为什么我可以在C 11中使用const函数修改类
- 我可以安全地将编译的库与-STD = C 11和-STD = C 14
- 我可以创建一个可以接受任何枚举的模板(非类型)param类吗?C 11
- 我可以将 std::function (C++11 lambda) 与 Boost 一起使用吗?
- C++11 我可以确保 condition_variable.wait() 不会错过通知吗?
- 对于 DirectX 11,我可以做些什么来不计算每个渲染()中的缓冲区
- 我可以安全地将 std::string 用于 C++11 中的二进制数据吗?
- 我可以在MacOS X 10.11上使用指向实际gcc/g++的gcc/g++
- 我可以在std::函数中使用模板类型T来传递lambda类型的函数C++11吗
- 我可以用openmp迭代C++11 std::元组吗
- 初始化数组时,我可以避免c++11移动吗
- C++11:我可以创建一个类型具有已删除析构函数的字段吗
- 如何编译模板c++11,我可以c++14
- 我可以返回一个向量来用C++11扩展现有的向量吗
- 我可以在C++Actor框架中使用C++11智能指针作为消息返回类型吗
- 我想我可以理解 N5.3.4 中的 §4140/11,但已扩展的分配函数的概念对我来说是不可理解的
- 我可以强制c++ 11的lambda通过引用返回吗?