الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

من اين جاء هذا الخطأ ؟؟؟؟

مغلق
بدأه مجلـد جديـد في 25 أبريل 2007 · 4 رد · 631 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عملت برنامج بواسطة MFC جاهز من خلال المعالج السحري في Visual Studio 2005 Professional ، وحاولت أضيف كلمة لكي تطبع على في View .

هذا هو الكود :

void CmyProgramView::OnDraw(CDC* pDC)
{
	CmyProgramDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: add draw code for native data here

	pDC -> TextOut(10,10,"Hello World!");
}

لم أغير شيء في البرنامج كامل إلا اضافة السطر الي فيه الطباعة ، ويطلع لي الخطا هذا :

1>------ Build started: Project: myProgram, Configuration: Debug Win32 ------
1>Compiling...
1>myProgramView.cpp
1>c:\documents and settings\power user\my documents\university\c plus plus programs\myprogram\myprogramview.cpp(57) : error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : cannot convert parameter 3 from 'const char [13]' to 'const CString &'
1>		Reason: cannot convert from 'const char [13]' to 'const CString'
1>		Constructor for class 'ATL::CStringT<BaseType,StringTraits>' is declared 'explicit'
1>		with
1>		[
1>			BaseType=wchar_t,
1>			StringTraits=StrTraitMFC_DLL<wchar_t>
1>		]
1>Build log was saved at "file://c:\Documents and Settings\Power User\My Documents\University\c plus plus programs\myProgram\Debug\BuildLog.htm"
1>myProgram - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

غيرت اسم الدالة من TextOut الى TextOutW ونفس رسالة الخطأ !

#2

وماهو افضل كتاب لتعلم MFC لشخص لديه خبره في C++ ؟

#3

والله اخوي انا غير مهتم بالـ MFC بشكل عام

لكن اذكر في مكتبة الشقيري كانك من اهل الرياض بالعليا العام موجود فيها كتب للـ MFC

تقدر تحصل فيها شي ان شاء الله يكون ممتاز ويفي بالغرض

#4
اقتباس
cannot convert parameter 3 from 'const char [13]' to 'const CString

إستخدم هذا

pDC -> TextOut(10,10,CString(_T("Hello World!")));

تم تعديل هذه المشاركة بواسطة cipher في 27 أبريل 2007 في 09:16

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#5

يمكنك أن تقرأ الخطأ بسهولة.. بص:

ابدا بالسطور الاخيرة

1>myProgram - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped

تلاحظ أن 0 نجاح و 1 فشل. ارجع للسطر قبله .. 1 خطأ

ثم ابدا من الاول مرة أخرى تلاحظ أن المشاكل بدأت من هنا

1>c:\documents and settings\power user\my documents\university\c plus plus programs\myprogram\myprogramview.cpp(57) : error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : cannot convert parameter 3 from 'const char [13]' to 'const CString &'
1>		Reason: cannot convert from 'const char [13]' to 'const CString'

الملف myprogramview.cpp و السطر به الخطأ هو 57. و كود الخطأ هو C2664 و يكمنك أن تستفهم عن كود الخطأ من msdn أو جووجل

و الخطأ فى الدالة TextOutW و لها الشكل القياسي في المكتبة: BOOL CDC::TextOutW(int,int,const CString &)

و الرسالة: لا يمكنني تحويل المعامل رقم 3 من const char [13] الى const CString& و واضح انه يقصد السطر خاصتك

DC -> TextOut(10,10,"Hello World!");

و المعمال 3 عندك هو "Hello World و هو من النوع const char [13] أو على الاقل فان ال compiler يراه كذلك و في التعريف القياسي المعامل الثالث هو من النوع const CString & و رسالة الخطأ تؤكد ذلك: لا يمكنني تحويل المعامل رقم 3 من .. الى ..

و بالتالي عليك أن تقوم أنت بتحويل المعامل خاصتك الى const CString & عن طريق التحويل الصريح:

CString(_T("Hello World!")

كما أشار الاخ cipher

بس كده!! الم أقل لك يمكنك أن تقرأ الخطأ بسهولة..

-مصطفى

هذا الموضوع مغلق.

مواضيع مشابهة