编译模板类出错
‘壹’ 请教高手啊 成员模板编译失败
#include <iostream>
2 using namespace std;
3 template<class T>class test{
4 public:
5 test(T);
6 void fun(T );//声明时候不需要再一次template
7 };
8 template<class T> test<T>::test(T t1){
9 }
10 template<class T>void test<T>::fun(T t1){//只需要一个template就够了
11 }
12 int main(){
13 test<int> t1(100);
14 return 0;
15 }
‘贰’ C++类模板定义VC编译出错
你再看看,可能你哪个字母写错叻,
因为我身边没有可以编程的机器,我也说不清楚,
过几天再帮你看看
或者你是新书什么的
V.C++是不支持新标准的
你可以试试visual studio 2008
‘叁’ 函数模板编译出错
//你有定义c么?
#include <cstdlib>
#include <iostream>
using namespace std;
template<typename Type>
Type max(Type a,Type b)
{
return a>b?a:b;
}
int main(int argc, char *argv[])
{
int x=4,y=6,z=0;
double a=4.33,b=3.14;
z=max(a,b);
cout<<
‘肆’ C++模板类实例化,编译器报错
第一种方法意味着在使用模板的转换文件中不但要包含模板声明文件,还要包含模板定义文件。在上例中,就是第一个示例,在array.h中用行内函数定义了所有的成员函数。或者在main.cpp文件中也包含进array.cpp文件。这样编译器就能看到模板的声明和定义,并由此生成array<int, 50>实例。这样做的缺点是编译文件会变得很大,显然要降低编译和链接速度。
第二种方法,通过显式的模板实例化得到类型。最好将所有的显式实例化过程安放在另外的文件中。在本例中,可以创建一个新文件templateinstantiations.cpp:
// templateinstantiations.cpp
#include "array.cpp"
template class array <int, 50>; // 显式实例化
‘伍’ ctex编译论文模板出错,报错如下:
我发现将.tex的文件,也就是你要编译的文件放入 \ctex\MiKTeX\miktex\bin\ 是可以编译的,我今天也这折腾了好久,因为一直都编译不了,我还找过在线编译,但是在线的特别烂,还一直都说我的模板是错的,。。。无语,结果编译后可以出PDF,放心吧,这方法我才实践过~~注意这个比如是在你安装了完整的CTeX前提下哦!其他好像还有别的方法我只是试过没什么用
‘陆’ C++编写Screen类模板 编译出错syntax error : missing ';' before '<'
构造函数定义
Screen<hi,wid>::Screen<hi,wid>(const string& cont):cursor(0),height(hi),width(wid){...}
改为
Screen<hi,wid>::Screen(const string& cont):cursor(0),height(hi),width(wid){...}
试试
‘柒’ 使用自己定义的模板类编译时的问题
根据你的描述,我认为出现问题的原因是把结构体放在类中。
在C++中,结构体类型(struct)的功能被扩展了,结构体中也可以包括成员函数,用以处理其包括的数据,使其具有封装的特征,具有类的特点。用struct声明的结构体类型实际上也就是类,但和类class还是有一点区别:用struct声明的类,如果对其成员不作private或bublic的声明,系统将其默认为public ,如果想分别指定私有成员和公有成员,则应用private或public做显示声明;而用class定义的类,如果不作private或public声明,系统将其成员默认为private
所以,在C++中,应将struct和class等同看待。由此,可以看出将结构体定义放在类中是不行的,实际就是将一个类的定义放在另外一个类的定义里面了。
‘捌’ C++模板友元的编译错误
1、第三行 friend Stack<T>; 缺少类型修饰符,应修改为friend class Stack<T>;
2、第三行加上class之后,还会出现问题,编译器不能识别标识符Stack<T>,这是因为Stack是模板类型,需要在Node模板定义前加上Stack模板声明,也就是在第一行前面加上
template<class T> class Stack;
修正如下:
template<class Type> class Stack; // 1、加上Stack模板声明
template<class T>
class Node
{ friend class Stack<T>; // 2、加上类型修饰符class
private:
T data;
Node<T> *link;
public:
Node(T item,Node<T>*p=NULL)
{
data=item;
link=p;
}
};
template<class T>
class Stack
{
public:
Stack(){top=0;}
~Stack();
Stack<T>&Push(T item);
Stack<T>&Pop();
void Print();
private:
Node<T> *top;
};
‘玖’ C++函数模板编译老出错的问题
if(max<x[i])
max=x[i];
这两句是x[i] 不是 a[i]
‘拾’ 模板类无法编译通过,谁能帮我解释
返回值前面加个 typename就可以,
这是为了告诉编译器class_A<T>::struct_A是一种类型而不是类的成员变量
其实:
warning C4346: “class_A<T>::struct_A” : 依赖名称不是类型
用“typename”为前缀来表示类型
编译器说的非常明确了!
VS7.1上编译通过!VS6.0不知道可不可以!
template <class T>
typename class_A<T>::struct_A* //---这里加个typename
class_A<T>::generate_new_struct_A_instance()
{
struct_A * new_instance = new struct_A;
new_instance->a = 1;
new_instance->b = 2;
return new_instance;
}
///
改成double 为什么可以,我很长时间没看模板了,具体我也不清楚!
我估计对于特化的函数是把它当作一般函数那样编译的!