急,一个简单的C++程序有去不掉的链接错误[问题]

iamcool

新手上路
注册
2002-03-11
消息
283
荣誉分数
0
声望点数
0
一个使用TEMPLATE的简单C++例子,可以编译通过,却有链接错误如下:

Linking...
Cpp1.obj : error LNK2001: unresolved external symbol "public: __thiscall stack<int>::node::node(int const &)" (??0node@?$stack@H@@QAE@ABH@Z)
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

哪位大侠帮忙看一下,谢谢。
 
我帮你改了改,可以生成EXE,不知道是不是你要的

改动之处:
1、在 stack.h 中
class node {
public: T val;
node * next;
node(const T&v){
val = 0;
next = 0;
};
};
2、在 stack.cpp中
去掉整段和node::node有关的构造函数。

Good luck
 
Re: 我帮你改了改,可以生成EXE,不知道是不是你要的

最初由 tutu007 发布
改动之处:
1、在 stack.h 中
class node {
public: T val;
node * next;
node(const T&v){
val = 0;
next = 0;
};
};
2、在 stack.cpp中
去掉整段和node::no...

如果有很多的内嵌类和类的函数,这样做就太麻烦,不利于维护。
单独的使用内嵌类或TEMPLATE都好用,放一起就不行。
不知道真正的错误在什么地方?
 
我倒是觉得你的#include "xxxx.cpp" 比较独特,因为好象我是第一次见到这么用。
 
最初由 tutu007 发布
我倒是觉得你的#include "xxxx.cpp" 比较独特,因为好象我是第一次见到这么用。

#include就是那么用的,虽然<>更常见.
 
:)

最初由 tutu007 发布
我倒是觉得你的#include "xxxx.cpp" 比较独特,因为好象我是第一次见到这么用。

其?呃很正常啊。
INCLUDE只不咿告灾COMPILER把被INCLUDE的文件与?前文件MERGE在一起COMPILE而已,至于是钷文件?是其它,根本???。
只不咿一般大家不?常把CPP等??文件呃?用而已。 :)
 
我在我接触过的所有C++ PROJECT中就没见过include 一个CPP文件的,因为完全有可替代的方法来表达

The #include Directive
The #include directive tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears. You can organize constant and macro definitions into include files and then use #include directives to add these definitions to any source file. Include files are also useful for incorporating declarations of external variables and complex data types. You only need to define and name the types once in an include file created for that purpose.
 
:)

最初由 Kent以东首帅哥 发布


#include就是那么用的,虽然<>更常见.

我想他真的不是“" 与<>的??而是?什么被包含的是.cpp文件而不是常?得.hpp

BTW: <>意思告灾COMPILER 到?准INCLUDE路?去找此文件,所以它与?境?量INCLUDE的韵置有晷(一般情?下?前路??包括在INCLUDE?境?量中)。所以系靳或?的INCLUDE文件都用<>
“"是指只?到?前路?查找,所以如果是自己的.HPP/。CPP等,只?""就足?。:) ;)
 
Re: 我在我接触过的所有C++ PROJECT中就没见过include 一个CPP文件的,因为完全有可替代的方法来表达

是的,你?邋。而且也确?很少有人喜?呃?用,
但是并不是真C/C++不允杂呃?。
如果不信,去查一下C/C++?准吧。如果嫌麻?,只?想一下COMPILER怎?工作就劫了。;)

?便真一下,呃并非C++的首?。C就允杂呃?。
 
too later, I am going home.
Hope I can get answer tomorrow. Thanks again, everybody.
 
最初由 tutu007 发布
我倒是觉得你的#include "xxxx.cpp" 比较独特,因为好象我是第一次见到这么用。

学生见到这个东西,第一反应往往是“这很正常”
职业程序员见到这个东西,肯定会被吓一个大跟头,因为这么干实在太可怕了。
 
1、建议将STACK.CPP的内容合并到 stack.h中,原因如下(当然,原来这样的定义对编译器来说也是对的):
甚至是在定义非内联函数时,模板的头文件中也会放置所有的声明和定义。这似乎违背了通
常的头文件规则:“不要在分配存储空间前放置任何东西”,这条规则是为了防止在连接时的多重定
义错误。但模板定义很特殊。由t e m p l a t e <⋯>处理的任何东西都意味着编译器在当时不为它分配存
储空间,它一直处于等待状态直到被一个模板实例告知。在编译器和连接器的某一处,有一机制能
去掉指定模板的多重定义。所以为了容易使用,几乎总是在头文件中放置全部的模板声明和定义。

2、iamcool提的问题好象只有把函数定义放入类中,目前我还没发现有什么方法可以在类定义外面进行定义。

3、“大屁股”发的帖子就是我想表达的意思,对于一个软件项目,一般都会有命名规则的问题,毕竟,绝大部分项目并不是一个人来完成。
 
最初由 大屁股 发布


学生见到这个东西,第一反应往往是“这很正常”
职业程序员见到这个东西,?..


:):D :D :D :D :D :D :)


Did you check all my posts for this topic? Do you understand the explaination ? 这很正常 is not mean tat is a good code, and this only mean it is normal to COMPILER and C/C++ standard.

and when you mean 肯定会被吓一个大跟头. Maybe someone's reason is he thinks it is not acceptable for compiler . :)

Do you thisk you are 职业程序员? I am 学生 ?


:D :D :D :D

Yes I am a student, and I alway a student but maybe not exactly the meaning of what you mean about 学生. :D :D :D :rolleyes: ;)
 
Well, bill,tutu007 and 大屁股,

I don't care you are professional or academic,
thank you all for the concerns and help.

Shall we just focus on the question and solve it?
Bcs I believe there are some other methods to make
it besides tutu007's solution.
 
后退
顶部