سؤال
أواجه مشكلة ربط مع برنامج أساسي 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>
في واحدة من المناسبتين والتخلص من cout
S، وسوف تجميع. ماذا يحدث هنا؟ أنا أستخدم 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;