类模板 文件分离(VS 2012即Microsoft VISUAL STUDIO 11.0 )

来源:互联网 发布:ubuntu u盘 默认密码 编辑:程序博客网 时间:2024/06/14 04:26

在使用类模板的情况下,如果像不实用类模板那样文件分离,那么在类(.h)中声明的函数和在文件(.cpp)中的关联不上(因为也是新手嘛,术语不对不要见怪哈),会出现“无法解析外部符号……………………………………”的error,而直接在类的定义中(.h)中写好的函数就不会出现这种错误,折腾了一个多小时之后终于发现,其实解决办法很简单哈,但是头次见到这样写的,很奇葩啊。对,解决方法就是在你使用哪个类的函数的文件中(main.cpp也好,或是其他你写的测试文件中也好)加入这么一行”  #include”test.cpp”  ”(这个test.cpptest类的.h文件对应的那个哈,可能说不明白,动动大脑袋吧),include的是.cpp文件,反正之前我是一直没见过,可能是俺太新手了吧哈。

下面附上一小段测试代码哈

//stdafx.h   这个是建立项目时候,选择“预编译头(不是空项目那个)”之后自己蹦跶出来的,都是往里写你需要的头文件的。

#pragma once

#include "targetver.h"

//上面那行也是自己蹦跶出来的,我也不知道具体干嘛的

#include <stdio.h>

#include <tchar.h>

//这两行的话,学过C语言的一般都知道

 

 

//targetver.h  同上

 

#pragma once

 

// 包括 SDKDDKVer.h将定义可用的最高版本的 Windows 平台。

 

// 如果要为以前的 Windows平台生成应用程序,请包括 WinSDKVer.h,并将

// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h

 

#include <SDKDDKVer.h>//没办法水平太差,这我也不认识

 

 

//test.h   // 这就是自己写的类的定义了

#pragma once

#include <iostream>

using namespace std;

template<class T>

class test

{

public:

         void Show1(){cout<<"类内"<<endl;}//对比一下,这个函数写在类内

         void Show2();//这个卸载类外,也就是test.cpp

         test(void);

         ~test(void);

};

 

 

//test.cpp   //类的实现

#include "stdafx.h"

#include "test.h"

 

template<class T>

test<T>::test(void)

{

}

 

template<class T>

test<T>::~test(void)

{

}

 

template<class T>

void test<T>::Show2()

{

         cout<<"类外"<<endl;

}

 

 

 

// stdafx.cpp

#include "stdafx.h"

#include <iostream>

using namespace std;

 

 

 

//Exercise.cpp    //最后一个文件喽

 

// Exercise.cpp :定义控制台应用程序的入口点。

//

 

#include "stdafx.h"

#include "test.h"

#include "test.cpp"       //最关键的地方了,这就是上面说的include一个 .cpp文件

 

int _tmain(int argc, _TCHAR* argv[])

{

         test<int > t;

t.Show1();

         t.Show2();

         return 0;

}

 

 

 

补充一下,这么写完之后吧,如果你修改了test.cpp的内容,再直接运行,还是你修改之前的结果(为啥我也不知道,也可能是我编译器问题),如果这样的话呢,就把”//#include<test.cpp>”的注释去掉,然后运行一下,这样肯定是错的,不要紧,只是让他编译一下(可能有说错术语了哈),然后再把//加上,再运行,你会发现就是你修改之后的结果了。

 

最后哈,俺觉得,文件分离如果是初学者的话现不用也就不用吧,类模板也是,不太会用就不要用了,要不我们这上机作业都不好搞定了,应该没几个人跟我一样才学C++没多长时间就开始没事喜欢折腾这些东西吧哈?

对了,最后的最后,如果不慎被哪个高手看到了哈,您就忍一忍吧,手下留情。。。。。。

 

 

原创粉丝点击