سؤال

أحاول تجميع الكود التالي في C ++

string initialDecision () 
{
 char decisionReviewUpdate;

 cout << "Welcome. Type R to review, then press enter." << endl;
 cin >> decisionReviewUpdate;

 // Processing code
}

int main()
{
    string initialDecision;
    initialDecision=initialDecision();

    //ERROR OCCURS HERE

 // More processing code
 return 0;
}

حيث تقول "خطأ يحدث هنا" ، أحصل على الخطأ التالي أثناء التجميع: "خطأ: لا يوجد مطابقة للاتصال بـ" (Std :: String) () ". كيف يمكنني حل هذا؟

هل كانت مفيدة؟

المحلول

لا تعطي سلسلتك ووظيفتك بنفس الاسم ، وسيختفي الخطأ.

لقد "نسي" المترجم أن هناك وظيفة بهذا الاسم ، عندما تعلن متغيرًا محليًا بنفس الاسم.

نصائح أخرى

المتغير المحلي الظلال اسم الوظيفة العالمية. من الأفضل إعادة تسمية المتغير المحلي ، ولكن هناك أيضًا مشغل النطاق الذي يتيح لك الوصول إلى الاسم العالمي على وجه التحديد:

initialDecision = ::initialDecision();

وهذا ما يسمى "الاسم الاختباء" في C ++. في هذا المثال بالذات ، تعلن عن متغير محلي ، له نفس الاسم كدالة في نطاق مساحة الاسم. بعد نقطة إعلان هذا المتغير تصبح الوظيفة مختفي, ، وفي كل مرة ذكرت اسم "inialDecision" ، فإن المترجم سوف يفترض بحق أنك تشير إلى المتغير. نظرًا لأنه لا يمكنك تطبيق مشغل مكالمات الوظيفة "()" على متغير من "سلسلة" ، فإن المترجم يصدر رسالة الخطأ.

في كثير من الحالات من أجل الرجوع إلى الأسماء المخفية ، يمكنك استخدام مشغل دقة النطاق "::". انظر استجابة Unclebens ، على سبيل المثال.

حاول إعادة تسمية المتغير لعدم مطابقة اسم الوظيفة.

المشكلة هي أنك تكرر الاسم initialDecision كمتغير ودالة. هذا يربك المترجم بشكل كبير. حاول إعادة تسمية المتغير إلى شيء آخر ؛ ثم ستعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top