• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

template و چند تكه بودن برنامه

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
سلام
كد هاي زير رو در نظر بگيريد :
g فايل هدر و f فايل اصلي
g.h
کد:
#ifndef G_H
#define G_H

template < class T >
class Stack {

public :

	Stack( int );
	~Stack()
	{
		delete [] stackPtr;

	}

private :

	int size;
	int top;
	T *stackPtr;

};


template< class T >
Stack< T >::Stack( int s ) 
{
	size = s > 0 ? s : 10;
	top = -1;
	stackPtr = new T[ size ];

}
#endif

f.cpp

کد:
#include <conio.h>
#include "g.h"
int main()
{
	Stack< double > s( 5 );
	_getch();
	return 0;

}

حالا اگه بخواهم كد اجرايي تابع stack( سازنده) رو در فايل g.cpp بنويسم به اين شكل :

کد:
#include "g.h"
template< class T >
Stack< T >::Stack( int s ) 
{
	size = s > 0 ? s : 10;
	top = -1;
	stackPtr = new T[ size ];

}

(البته كد اجرايي تابع stack رو از فايل g.h برداشتم)
چرا برنامه ارور ميده البته تا اونجايي كه من فهميدم ارور مربوط به لينك شدنه من هميشه اين كارو ميكنم يعني پروتو تايپ توابع كلاس رو توي يه فايل هدر و اجراي توابع رو توي فايل سي پلاس پلاس و خود برنامه ي اصلي رو هم توي فايل سي پلاس پلاس ديگه اي مينويسم
هر چي هست زير سر اين template هستش
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
خود كد مشكلي نداره وقتي پروتو تايپ توابع رو توي فايل g.h و كد اجرايي توابع رو توي فايل g.cpp و خود كد اصلي رو در فايل f.cpp مي نويسم برنامم با ارور روبرو مي شه در حالي كه اگه پروتو تايپ توابع و كد اجرايي توابع همرو توي فايل g.h بنويسم و فايل g.cpp رو حذف كنم برنامم به راحتي اجرا ميشه
كامپايلرم ويژوال سي پلاس پلاس مايكرو سافته
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
من الان دستری به ویژوال سی ندارم ولی کدتون به همین شکل یعنی دو فایل مجزا با کامپایلر های gcc دیجتال مارس و بورلند سی ++ بیلدر کامپایل می شه بعضی وقت ها کامپایلر ماکروسافت قاطی می کنه به جای include "g.h" توی فایل
f.cpp از include "g.cpp" استفاده کنید شاید درست بشه
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
تست كردم جواب نداد ميگم با همين كامپايلر چند فايل رو با هم كامپايل كردم البته بدون class - template به خاطر همينه فكر ميكنم مشكل از اين class - template هستش و بايد پروتو تايپ توابع و كد اجرايي توابع رو توي يه فايل بنويسم
راستي توي g++ ميدونيد چه طور ميشه چند تا فايل رو با هم كامپايل كرد؟ ( از كامند پرامپت )
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
نمی دونم چون من که کامپایل می کنم هیچ مشکلی نداره
با g++ این طوری
کد:
g++ -iINCLUDEPATH  f.cpp g.cpp
 
بالا