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

یک مشکل ساده در C++ !

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
با سلام
من در حال خواندن کتاب how to c++ deitel & deitel هستم .
در قسمت:
Fig03_11_13
به مشکل کامپایل نشدن فایلها برخوردم.

نرم افزار: ماکروسافت ویژوال استدیو 2010
پروژه:
win32 concole application


فایلها بدین صورت هستند:


fig03_13.cpp



#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h" // include definition of class GradeBook

int main()
{
GradeBook gradeBook1( "CS101 Introduction to C++ Programming" );
GradeBook gradeBook2( "CS102 Data Structures in C++" );

cout << "gradeBook1 created for course: " << gradeBook1.getCourseName()
<< "\ngradeBook2 created for course: " << gradeBook2.getCourseName()
<< endl;
return 0;
}


GradeBook.cpp


#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h"

GradeBook::GradeBook( string name )
{
setCourseName( name );
}

void GradeBook::setCourseName( string name )
{
courseName = name;
}

string GradeBook::getCourseName()
{
return courseName;
}

void GradeBook::displayMessage()
{
cout << "Welcome to the grade book for\n" << getCourseName()
<< "!" << endl;
}



GradeBook.h

#include <string>
using std::string;

class GradeBook
{
public:
GradeBook( string );
void setCourseName( string );
string getCourseName();
void displayMessage();
private:
string courseName;
};

این هم اروری که میده:


1>------ Build started: Project: B, Configuration: Debug Win32 ------
1>Build started 2011/07/07 07:12:39 ب.ظ.
1>InitializeBuildStatus:
1> Touching "Debug\B.unsuccessfulbuild".
1>ClCompile:
1> All outputs are up-to-date.
1> B.cpp
1>ManifestResourceCompile:
1> All outputs are up-to-date.
1>B.obj : error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall GradeBook::getCourseName(void)" (?getCourseName@GradeBook@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function _main
1>B.obj : error LNK2019: unresolved external symbol "public: __thiscall GradeBook::GradeBook(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0GradeBook@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _main
1>c:\documents and settings\hamid\my documents\visual studio 2010\Projects\B\Debug\B.exe : fatal error LNK1120: 2 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.46
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



ممنون میشم راهنماییم کنین. :)

 

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
در منوي project ‌به قسمت properties‌ فكر كنم آخرين گزينه باشه بريد و در بخش
configueation peroperties
c/c++
code generation
گزينه runtime library رو ازmdd به /MT( فكر كنم اولين گزينه باشه ) تغيير بديد

اميدوارم كه حل بشه
 

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
در منوي project ‌به قسمت properties‌ فكر كنم آخرين گزينه باشه بريد و در بخش
configueation peroperties
c/c++
code generation
گزينه runtime library رو ازmdd به /MT( فكر كنم اولين گزينه باشه ) تغيير بديد

اميدوارم كه حل بشه

ممنون
ولی مشکل همچنان باقیه و حل نشد .

به نظرتون اشکال از پروژهایی که انخاب کردم نیست؟
من الان win32 console application رو انتخاب کرده ام.
 

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
كدتون به نظر مشكلي نداره نوع پروژه هم درسته اشكال از لينك هست و Std

پروژه رو كه احيانا با ورژن هاي قبلي vs نساختيد؟
 

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
راستي بعد از اينكه اون تعيير تنظيمات رو اعمال كرديد بايد پروژه رو clean مي كرديد و دوباره كامپايل كنيد
يا اينكه از Rebuild استفاده كنيد
 

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
راستي بعد از اينكه اون تعيير تنظيمات رو اعمال كرديد بايد پروژه رو clean مي كرديد و دوباره كامپايل كنيد
يا اينكه از Rebuild استفاده كنيد

انجام دادم ولی باز :(

راستی:
در یکی از فرومهای خارجی خوندم که یارو گفته بود که نمیتونیم دو فایل با پسوند cpp رو در یک پروژه معمولی داشته باشیم و در این صورت باید از پروژه empty console project استفاده کنیم.
ولی من هرچی در microsoft visual studio گشتم همچین گزینه ای رو پیدا نکردم.
 

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
لطفا یکی راهنماییم کنه.
از کدوم نوع پروژه برای ساخت باید استفاده کنم برای این پروژه؟؟؟
همونطور که گفتم با console application نمیشه.
البته نمیدونم.شاید هم مشکل از اون نباشه ولی چیز دیگه ای هم به ذهنم نمیرسه.........
 

NdR

Registered User
تاریخ عضویت
10 مارس 2004
نوشته‌ها
86
لایک‌ها
0
اروری که تو پست اولتون گذاشتید مربوط به کامپایل فایلی به اسم B.cpp هست که کدش رو نذاشتید.
برای ساختن empty project، وقتی پروژه جدیدی ایجاد می کنید در Win32 Application Wizard در قسمت Application Settings چک باکس empty project رو انتخاب کنید.​
 

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
من شبيه كد شما رو در ويژوال استوديو 2005 نوشتم مشكلي نداشت
نوع پروژه win32 console application
در مورد تنظيمات پروژه اگه نوع كامپايل در حالت debug‌هست runtime library رو روي گزينه MDd يا MTD‌ بايد بزاريد و اگر در مد release كامپايل مي كنيد روي MD ياMT
 

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
اين لينك رو در مورد runtime library بخونيد
http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx

كلا مشكل از تغييراتي هست كه در ورژنهاي جديد ويژوال استوديو در اين كتابخانه داده شده
به نظر مياد اگر از MT‌يا MTd‌استفاده بشه مشكل نداره
 
Last edited:

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
اروری که تو پست اولتون گذاشتید مربوط به کامپایل فایلی به اسم B.cpp هست که کدش رو نذاشتید.
برای ساختن empty project، وقتی پروژه جدیدی ایجاد می کنید در Win32 Application Wizard در قسمت Application Settings چک باکس empty project رو انتخاب کنید.​

فایل B.cpp همون فایل fig03_13.cpp هست. اسمشو عوض کرده بودم.

من شبيه كد شما رو در ويژوال استوديو 2005 نوشتم مشكلي نداشت
نوع پروژه win32 console application
در مورد تنظيمات پروژه اگه نوع كامپايل در حالت debug‌هست runtime library رو روي گزينه MDd يا MTD‌ بايد بزاريد و اگر در مد release كامپايل مي كنيد روي MD ياMT

آخه مسئله اینجاست که منم همین پروژه رو در نرمافزار code::blocks انجام دادم، دوباره ارور داد.
راستی یه سوال:
احتمالا من در تعریف فایلهای جدید اشتباه میکنم.
من دو فایل دیگه (GradeBook.h و GradeBook.cpp) رو همینطوری در پوشه ای که فایل fig03_13.cpp که فایل اصلی هست کپی میکنم.
آیا این روش اشتباهه؟ یعنی اینکه باید به VS هم معرفی و ... بشن یا نه ؟


متشکر
 

wickietetsu

Registered User
تاریخ عضویت
29 می 2007
نوشته‌ها
198
لایک‌ها
3
من دو فایل دیگه (GradeBook.h و GradeBook.cpp) رو همینطوری در پوشه ای که فایل fig03_13.cpp که فایل اصلی هست کپی میکنم.
آیا این روش اشتباهه؟ یعنی اینکه باید به VS هم معرفی و ... بشن یا نه ؟

بالاخره مشکل حل شد :cool:

دو تا اشتباه داشتم.
یکی اینکه کپی کردن دو تا فایل دیگه صرفا کافی نبود و باید با استفاده از گزینه project > add Existing item اون دو تا فایل رو انتخاب میکردم و یا با استفاده از گزینه project > add item نوع فایل ها رو انتخاب می کردم و کدها رو داخلشون قرار می دادم.

اشتباه دوم هم این بود که کد مقابل رو فقط در فایل اصلی (fig03_13.cpp) نوشته بودم ولی در فایل GradeBook.cpp نذاشته بودم. ( ویژوال استدیو همیشه این رو در فایلهای cpp انگار لازم داره)

code:
#include "stdafx.h"
////end

از NdR و مخصوصا از Roby عزیز به خاطر وقتی که گذاشتن تشکر میکنم.
حمید.
 
Last edited:

Roby

کاربر فعال فوتبال<br> عضو تحریریه مجله فوتبال
کاربر فعال
تاریخ عضویت
20 ژوئن 2005
نوشته‌ها
1,263
لایک‌ها
1,395
مگه كلاستون رو از طريق خود ويژوال استوديو اضافه نمي كنيد ؟
بهرحال خوشحالم كه مشكلتون حل شد


موفق باشيد
 
بالا