我收到此错误>>当我尝试为文件运行make时,不会命名类型错误does not name type
。我试着到处寻找,但无法找到解决方法。请帮忙!
templateex.cpp
#include <stddef.h>
#include <assert.h>
template<class T>
templateex<T>::templateex()
{
cout<<"Constructor Executing"<<endl;
noValidEntries=0;
}
templateex.h
#include <iostream>
using namespace std;
#define SIZE 20
template <class T> class templateex
{
public:
templateex(); // default constructor
};
#include "templateex.cpp"
Main.cpp的
#include "templateex.h"
int main()
{
templateex<int>example;
}
错误
templateex.cpp:5:1: error: 'templateex' does not name a type
答案 0 :(得分:0)
Templateex.h
#ifndef MY_TEMPLATEEX_H
#define MY_TEMPLATEEX_H
template <class T>
class Templateex
{
public:
Templateex();
private:
int noValidEntries_;
};
#include "Templateex.inl"
#endif
Templateex.inl
#ifndef MY_TEMPLATEEX_INL
#define MY_TEMPLATEEX_INL
#include<iostream>
template <class T>
Templateex<T>::Templateex()
{
std::cout << "Constructor Executing" << std::endl;
noValidEntries_ = 0;
}
#endif
的main.cpp
#include "Templateex.h"
int main()
{
Templateex<int> example;
}
编译器在实例化时需要查看模板的定义,本质上要求模板包含在一个头文件中。但是,将模板类定义与其声明分离是一种很好的方式,特别是对于复杂的定义。因此,“#include Templateex.inl”。
通常模板定义文件(本质上是头文件)不应使用“cpp”扩展名,因为默认情况下许多工具(例如GNU make)假设“* .cpp”文件是源文件,* .inl这是一个很好的名字。
使用#ifndef #define ... #endif防范多重内容。
不要在头文件中“使用namespace std”,始终使用完全限定名称。 “using ..”的作用是使“namespace std”中的所有名称都可用。由于头文件可能包含在许多不同的编译单元中,因此头文件中名称空间中的导出名称会污染其他名称空间。 “using namespace ...”的使用应限制在单个编译单元中,即仅限于源文件中。
您没有声明变量“noValidEntries”......