ورود

View Full Version : مبتدی: ایجاد کلاس جداگانه



smemamian
شنبه 07 بهمن 1391, 06:00 صبح
سلام دوستان

من کلاس جدا گانه درست می کنم(++Add New ... => class c) چطوری باید محتویات کد رو داخلش بذارم ؟
مثلا کلاسی با نام person درست کردم الان چطوری و کجا public و private رو مشخص کنم ؟

#include "person.h"

Person::Person()
{


}

حامد مصافی
شنبه 07 بهمن 1391, 14:59 عصر
در فایل person.h
اینها مقدمات C++ هستند. پیشنهاد می‌کنم در این مورد این زبان یک کتاب مطالعه کنید.

smemamian
دوشنبه 09 بهمن 1391, 21:32 عصر
انگار بد توضیح دادم, من بیشتر مثال های کتاب ها رو داخل, و در بالای خود main می نوشتم !
الان یک کلاس مثلا با نام Book درست کردم, محتویات کلاس باید چطوری باشه ؟
محتویات main :


#include <iostream>
#include <conio.h>
#include "book.h"
using namespace std;

int main()
{
Book NB[10];
int n = 0 ;
char ch = 'y' ;
while(true)
{
cout << "Plz Enter " << n+1 << " Book : \n\n" ;
NB[n++].input();
cout << "Are You Continue ? (Y|N) \n" ;
cin >> ch ;
if(ch=='N' || ch=='n')
break ;
cin.ignore(10,'\n');
system("CLS");
}
for(int i=0 ;i<n ; i++)
NB[i].output();
cout << endl ;
return 0;
}

محتویات کلاسی که با نام Book درست کردم :
#include "book.h"
#include <iostream>

Book::Book()
{
private:
int NU_Book , P_Book ;
char NM_Book[20] , W_Book[20] ;
public:

void input();
void output();
}


void Book::input(){

cout<< "Plz Enter Name Book : \n" ;
cin.get(NM_Book , 20);
cout<< "Plz Enter Writer : \n" ;
cin.ignore(10, '\n');
cin.get(W_Book, 20);
cout << "Plz Enter Price Book : \n" ;
cin >> P_Book ;
cin.ignore(10,'\n');
}

void Book::output(){

cout << "Name Book : " << NM_Book
<<" Writer Book : " << W_Book
<<" Price Book : " << P_Book << endl ;
}
اینطوری درسته ؟

aidinMC
سه شنبه 10 بهمن 1391, 00:00 صبح
نه!
شما اول این فایلهارو بساز

book.h
book.cpp

بعد تو book.h این محتویات رو بساز


#include <iostream>

class Book
{
private:
int NU_Book , P_Book ;
char NM_Book[20] , W_Book[20] ;
public:

Book();
void input();
void output();
};


بعد بیا تو book.cpp این محتویات رو وارد کن (book.h رو اینکلود کن)



#include <book.h>

Book::Book()
{
//تابع سازنده
}

void Book::input(){

cout<< "Plz Enter Name Book : \n" ;
cin.get(NM_Book , 20);
cout<< "Plz Enter Writer : \n" ;
cin.ignore(10, '\n');
cin.get(W_Book, 20);
cout << "Plz Enter Price Book : \n" ;
cin >> P_Book ;
cin.ignore(10,'\n');
}

void Book::output(){

cout << "Name Book : " << NM_Book;
<<" Writer Book : " << W_Book;
<<" Price Book : " << P_Book << endl ;
}

smemamian
سه شنبه 10 بهمن 1391, 05:23 صبح
خطا میده ! الان محتویات 3 فایل به صورت زیر هست :

main :

#include <iostream>
#include <conio.h>
#include "book.h"
using namespace std;

int main()
{
Book NB[10];
int n = 0 ;
char ch = 'y' ;
while(true)
{
cout << "Plz Enter " << n+1 << " Book : \n\n" ;
NB[n++].input();
cout << "Are You Continue ? (Y|N) \n" ;
cin >> ch ;
if(ch=='N' || ch=='n')
break ;
cin.ignore(10,'\n');
system("CLS");
}
for(int i=0 ;i<n ; i++)
NB[i].output();
cout << endl ;
return 0;
}

book.cpp :

#include <iostream>
#include "book.h"

Book::Book()
{

}

void Book::input(){

cout<< "Plz Enter Name Book : \n" ;
cin.get(NM_Book , 20);
cout<< "Plz Enter Writer : \n" ;
cin.ignore(10, '\n');
cin.get(W_Book, 20);
cout << "Plz Enter Price Book : \n" ;
cin >> P_Book ;
cin.ignore(10,'\n');
}

void Book::output(){

cout << "Name Book : " << NM_Book;
<<" Writer Book : " << W_Book;
<<" Price Book : " << P_Book << endl ;
}


book.h :

#ifndef BOOK_H
#define BOOK_H
#include <iostream>

class Book
{
private:
int NU_Book , P_Book ;
char NM_Book[20] , W_Book[20] ;
public:

Book();
void input();
void output();
};
#endif // BOOK_H


متن خطا :



main.obj:-1: error: LNK2019: unresolved external symbol "public: void __thiscall Book::output(void)" (?output@Book@@QAEXXZ) referenced in function _main

main.obj:-1: error: LNK2019: unresolved external symbol "public: void __thiscall Book::input(void)" (?input@Book@@QAEXXZ) referenced in function _main

main.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall Book::Book(void)" (??0Book@@QAE@XZ) referenced in function _main





debug\Test.exe:-1: error: LNK1120: 3 unresolved externals

aidinMC
سه شنبه 10 بهمن 1391, 10:39 صبح
#include <iostram> رو از book.cpp بردار
برو به آدرس پوشه ی که پروژت توش هست حالا یه دونه back بزن ، اینجا یه پوشه هست که اسمش با اسم پروژت شروع میشه ، مثلا یه همچین اسمی داره ( با فرض این که اسم پروژت book باشه)

book-build-Desktop_Qt_5_0_0_MSVC2010_32bit_SDK-Debug

این پوشه رو پاک کن و دوباره از طریق qtcreator پروژه رو کامپایل کن....

smemamian
پنج شنبه 19 بهمن 1391, 08:32 صبح
من هر کاری می کنم باز پیغام خطا دریافت می کنم، خطاهم از
book.cpp هست :

(http://upcity.ir/images/36692655011957286130.png)
http://upcity.ir/images/36692655011957286130.png (http://upcity.ir/images/36692655011957286130.png)

smemamian
جمعه 20 بهمن 1391, 09:46 صبح
جهان رو آب برد و ما همچنان در ایجاد کلاس جداگانه مانده ایم :اشتباه:

aidinMC
جمعه 20 بهمن 1391, 13:04 عصر
عکس بالا نمیاد
کاری که گفتمو انجام دادی؟

smemamian
جمعه 20 بهمن 1391, 13:55 عصر
بله ! همه کارهایی که گفتین انجام دادم،

عکس رو یجا دیگه آپلود کردم :

(http://upload.tehran98.com/img1/aitha2sdxxh65d30ts.png)
http://upload.tehran98.com/img1/aitha2sdxxh65d30ts.png (http://upload.tehran98.com/img1/aitha2sdxxh65d30ts.png)

من چه iostream رو اینکلود کنم چه نکنم این پیغام ظاهر میشه !

روی 2تا سیستم عامل تست کردم باز پیغامی که در تصویر بالا هست رو دریافت کردم .




Qt Creator 2.6.1
Based on Qt 4.8.3 (32 bit)

Built on Dec 19 2012 at 11:34:43

UfnCod3r
جمعه 20 بهمن 1391, 14:41 عصر
بله ! همه کارهایی که گفتین انجام دادم،

عکس رو یجا دیگه آپلود کردم :

(http://upload.tehran98.com/img1/aitha2sdxxh65d30ts.png)
http://upload.tehran98.com/img1/aitha2sdxxh65d30ts.png (http://upload.tehran98.com/img1/aitha2sdxxh65d30ts.png)

من چه iostream رو اینکلود کنم چه نکنم این پیغام ظاهر میشه !

روی 2تا سیستم عامل تست کردم باز پیغامی که در تصویر بالا هست رو دریافت کردم .





خب شما دقت نمی کنی دیگه ! اصلا ارورش رو می خونی !:عصبانی++:
ینکلود کردی ولی بعد نوشتی cout
باید بنویسی std::cout چون تو فضای نام std هست ! یا باید از using namespace std بالا هدر یا .. استفاده کنی !
یعنی کداتو بردی تو یه سیستم عامل دیگه ببینی اوجا کامپایل می شه یا نه :متعجب: :متعجب:

aidinMC
جمعه 20 بهمن 1391, 15:10 عصر
بله ، همونطور که دوستمون گفت باید std رو بنویسی
و این که در خطوط 22 تا 25 عکس باید توجه کنی که شما بعد از آخرین >> باید ; بذاری نه آخر هر خط یعنی ; باید تو خط های 22 و 23 حذف بشه....

smemamian
جمعه 20 بهمن 1391, 19:16 عصر
باور کنید اصلا حواسم نبود! حالا خب چرا می زنید ؟!! :ss

ممنونم .