سؤال

أواجه مشكلة ربط مع برنامج أساسي C ++. لا، أنا لا أشم .cpp ملفات!

هذا هو ما يحدث.

main.cpp:

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

int main() {
   std::cout << "Hello!";
}

header.h:

#ifndef _HEADER_H
#define _HEADER_H

class Something {
public:
   printContents();
};

#endif

something.cpp:

#include "header.h"

#include <iostream>

Something::printContents() {
    cout << "This class's Contents!!";
}

ما يحدث هو أنني أحصل على خطأ مترجم يسير: تعاريف متعددة لبعض وظيفة C القياسية، مثل strtod:

G ++ -O ... Main.o
بناء / .... Main.o: in Function `Strtod ':

../mmingw/bin/../lib/gcc/3/3.4.5/../../../../include/stdlib.h:318: تعريف متعدد من `strtod '

بناء / .. شيء ما.

إذا التخلص من #include <iostream> في واحدة من المناسبتين والتخلص من coutS، وسوف تجميع. ماذا يحدث هنا؟ أنا أستخدم G ++ و Netbeans لتجميعها.

حاولت في سطر الأوامر:

g++ *.h *.cpp -o program

ونفس الشيء حدث.

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

المحلول 6

كانت المشكلة في تركيب متعددة من مينج. كان لدي واحد مثبت بالفعل، وعندما حصلت على QT على جهاز الكمبيوتر الخاص بي، فقد قمت بتثبيتها مينغو. المشكله، قمت بجولة الكود إلى خوادم جامعتي وتشغيلها.

المشكله !!

شكرا للجميع على المساعدة، بالتأكيد سوف اتبع المبادئ التوجيهية الخاصة بك في المستقبل.

أسماء الرأس - لا توجد سفلات صحيحة نوع الإرجاع الرمز الحقيقي في المنتديات!

ليو bruzzaniti.

نصائح أخرى

يرجى ملاحظة ذلك _HEADER_H هو اسم غير قانوني في C ++ رمز المستخدم - أسماء الأسماء التي تبدأ بالحرف السفلية وحرف كبير محفوظة لتنفيذ C ++. هذا لا يسبب عادة مشاكل ملحوظة، ولكن عند استخدام ما قد يكون اسم شائع في تنفيذ الرأس في هذا السياق، قد يكون جيدا.

تعديل،

Something::printContents() 
{    
  std::cout << "This class's Contents!!";
}

ملاحظة: حدد نموذج بيانات الإرجاع.

واحدة من مشاكلك موجودة هنا:

حاولت في سطر الأوامر: g ++ * .h * .cpp -o

لا تمر بملفات رأسك ... جرب شيئا مثل هذا:

G ++ * * .cpp -o

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

  • أضف void عودة نوع إلى printContents- الوظائف (لذلك يقول void printContents(); في الرأس و void Something::printContents() { في ملف التنفيذ)
  • يستخدم std::cout افضل من مجرد cout. cout غير محدد في النطاق الذي يستخدمه
  • تأكد من أن header.h ينتهي بخط فارغ
  • يستخدم HEADER_H بدلا من _HEADER_H (مثل نيل بتروورث يقول)

يمكنني استخدام سطر الأوامر g++ main.cpp something.cpp تجميع.

أرى بعض المشاكل. أنت shuolt حدد قيمة العودة وظيفة

printContents()

ويجب أن تكتب

std::cout

إذا كنت لا تكتب

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