कोड कोडब्लॉक्स में काम करता है, लेकिन लिनक्स में संकलन करते समय त्रुटियां देता है

main.cpp

#include 
#include 
#include 
#include "cootie.h"

using namespace std;

int main()
{
    cout << "Time to create a Cootie!" << endl;
    cootie c;
    c.setName(name);
    cout << "Add body parts." << endl;
    cout << "1) Body" << endl << "2) Head" << endl << "3) Legs" << endl << "4) Wings" << endl << "5) Antennas" << endl << "6) Eyes" << endl;
    cout << "Input 7 to print.";
    while (roll != 7)
    {
        cin >> roll;
        if (roll == 1)
        {
            c.setBody(numBody);
        }
        if (roll == 2)
        {
            c.setHead(numHead);
        }
        if (roll == 3)
        {
            c.setLeg(numLeg);
        }
        if (roll == 4)
        {
            c.setWing(numWing);
        }
        if (roll == 5)
        {
            c.setAntenna(numAntenna);
        }
        if (roll == 6)
        {
            c.setEye(numEye);
        }
        if (roll == 7)
        {
            c.print();
        }
    }
}

cootie.h

#ifndef COOTIE_H
#define COOTIE_H
#include 
#include 
#include 
using namespace std;
class cootie
{
    public:
        cootie();
        int numLeg, numHead, numEye, numWing, numBody, numAntenna, roll;
        string name = "Undefined";
        int setName(string& name);
        int setLeg(int& numLeg);
        int setHead(int& numHead);
        int setEye(int& numEye);
        int setWing(int& numWing);
        int setBody(int& numBody);
        int setAntenna(int& numAntenna);
        void print(string name, int numLeg, int numHead, int numEye, int numWing, int numBody, int numAntenna);
};

#endif//COOTIE_H

cootie.cpp

#include "cootie.h"


cootie::cootie()
{
    numLeg;
    numHead;
    numEye;
    numWing;
    numBody;
    numAntenna;
    roll;
    name = "Undefined";
}

int cootie::setName(string& name)
{
    cout << "Name your Cootie!" << endl;
    getline(cin, name);
}
int cootie::setBody(int& numBody)
{
    numBody++;
}
int cootie::setHead(int& numHead)
{
    numHead++;
}
int cootie::setWing(int& numWing)
{
    numWing++;
}
int cootie::setLeg(int& numLeg)
{
    numLeg++;
}
int cootie::setEye(int& numEye)
{
    numEye++;
}
int cootie::setAntenna(int& numAntenna)
{
    numAntenna++;
}
void cootie::print(string name, int numLeg, int numHead, int numEye, int numWing, int numBody, int numAntenna)
{
    cout << "Cootie called " << name << endl;
    cout << numLeg << " Leg(s)" << endl;
    cout << numHead << " Head(s)" << endl;
    cout << numEye << " Eye(s)" << endl;
    cout << numWing << " Wings(s)" << endl;
    cout << numBody << " Body(s)" << endl;
    cout << numAntenna << " Antenna(s)" << endl;
}

मैं इन फ़ाइलों को लिनक्स में संकलित करने का प्रयास कर रहा हूं, लेकिन मुझे cootie.cpp को स्रोत कोड में संकलित करने के लिए नहीं मिल रहा है। मैंने "g ++ -c cootie.cpp" का उपयोग करने का प्रयास किया लेकिन मुझे त्रुटियां मिल रही हैं।

cootie.h: 11: 22: त्रुटि: आईएसओ सी ++ सदस्य 'numLeg' के प्रारंभिकरण को रोकता है   cootie.h: 11: 22: त्रुटि: 'numLeg' स्थिर बनाना   cootie.h: 11: 22: त्रुटि: आईएसओ सी ++ गैर-स्थिर स्थिर सदस्य 'numLeg' के कक्षा में प्रारंभिकरण को मना करता है

मैंने std = c ++ 11 ध्वज के साथ संकलन करने का प्रयास किया, लेकिन मुझे cc1plus मिला: त्रुटि: अपरिचित कमांड लाइन विकल्प "-std = c ++ 11" त्रुटि के रूप में, इसलिए मैंने std = c ++ 0x की कोशिश की लेकिन उसने मुझे दिया वही त्रुटियां जो मैंने शुरू में की थीं।

कोड को संशोधित किया गया है, लेकिन अब जब मैं std = c ++ 0x ध्वज के साथ संकलित करता हूं तो मुझे यह त्रुटि प्राप्त होती है

/usr/lib64/gcc/x86_64-slackware-linux/4.5.2/../../../../lib64/crt1.o: फ़ंक्शन _start 'में: /glibc-tmp-6341ca4bac93b935314b1241c89966aa/glibc-2.13/csu/../sysdeps/x86_64/elf/start.S:109: main 'के अनिर्धारित संदर्भ collect2: ld 1 निकास स्थिति लौटा दी

मैं लिनक्स के लिए काफी नया हूं, इसलिए मुझे सच में यकीन नहीं है कि इस मुद्दे का क्या कारण है।

0
मैं उस ध्वज का उपयोग कैसे करूं?
जोड़ा लेखक Zachary McCloud, स्रोत
मैंने std = c ++ 11 ध्वज के साथ संकलन करने का प्रयास किया, लेकिन मुझे cc1plus: त्रुटि: अपरिचित कमांड लाइन विकल्प "-std = c ++ 11" त्रुटि के रूप में मिला , इसलिए मैंने std = c ++ 0x की कोशिश की लेकिन उसने मुझे वही त्रुटियां दी जो मैंने शुरू में की थी
जोड़ा लेखक Zachary McCloud, स्रोत
क्या आपने सी ++ 11 चालू किया था?
जोड़ा लेखक chris, स्रोत
आप वास्तव में, वास्तव में मूल बातें का अध्ययन करने की आवश्यकता है। सिंटैक्स को छोड़कर आपके कोड में सही लगभग कुछ भी नहीं है।
जोड़ा लेखक molbdnilo, स्रोत
आपको सी ++ 11 समर्थन पर स्विच करने की आवश्यकता है। std = c ++ 11 ध्वज का उपयोग करें।
जोड़ा लेखक juanchopanza, स्रोत

2 उत्तर

You can't initialize instance variables (e.g. numLeg) in the class definition in < C++11x. You have to initialize them in the constructor, e.g. like this:

cootie::cootie()
{
  numLeg = 0;
  numHead = 0;
  numEye = 0;
  numWing = 0;
  numBody = 0;
  numAntenna = 0;
  roll = 0;
}

प्रत्येक इंस्टेंस वैरिएबल से पहले अपनी हेडर फाइल में बस = 0 को हटा दें।

2
जोड़ा
बस कोशिश की, लेकिन जब मैंने इसे फिर से संकलित करने का प्रयास किया तो उसने यह /usr/lib64/gcc/x86_64-slackware-linux/4.5.2 /../../../../ lib6 और zwnj दिया; 4/crt1.o: फ़ंक्शन में _start ': /glibc-tmp-6341ca4bac93b935314b1241c89966aa/glibc-2.13/csu/.‌ ./sysdeps/x86_64/elf‌ /start.S:109: अपरिभाषित संदर्भ main 'collect2: ld को 1 निकास स्थिति लौटा दी
जोड़ा लेखक Zachary McCloud, स्रोत
मुझे डर है कि मैं पीछा नहीं करता, यह सब कोड मैंने लिखा है
जोड़ा लेखक Zachary McCloud, स्रोत
मैंने सोचा कि मैं बस cootie.cpp को स्रोत कोड में संकलित करने की कोशिश कर रहा था, और उसके बाद उस और main.cpp को संकलित करता हूं? सचमुच ब्रांड नए, बेवकूफ सवालों के लिए खेद है।
जोड़ा लेखक Zachary McCloud, स्रोत
ठीक है, मैंने उन्हें एक साथ संकलित करने की कोशिश की जैसे आपने कहा और यह ठीक काम करता है, धन्यवाद!
जोड़ा लेखक Zachary McCloud, स्रोत
आप कर सकते हैं , लेकिन केवल के बाद से सी ++ 0x (जो अब सी ++ 11 है)।
जोड़ा लेखक chris, स्रोत
@ZacharyMcCloud, आप संभवतः केवल इसके कार्यान्वयन फ़ाइल को और इसके बजाय मुख्य फ़ाइल को संकलित और लिंक कर रहे हैं। सवाल से यह एक पूरी तरह से अलग समस्या है।
जोड़ा लेखक chris, स्रोत
संकलन और लिंक करने के लिए आपको अपने आदेशों में main.cpp शामिल करना होगा। cootie.cpp एक संपूर्ण कार्यक्रम नहीं है।
जोड़ा लेखक chris, स्रोत
@ क्रिस ओह, हाँ, टाइपो। धन्यवाद। फिक्स्ड।
जोड़ा लेखक ckruse, स्रोत

यह लाइन आपकी समस्या है:

int numLeg = 0, numHead = 0, numEye = 0, numWing = 0, numBody = 0, numAntenna = 0, roll = 0;

आपको = 0 के ड्रॉप को छोड़ना होगा, अंत में उन्हें कन्स्ट्रक्टर में प्रारंभ करना होगा। I.o.w:

class cootie
{
public:
    int numLeg, numHead, numEye, numWing, numBody, numAntenna, roll;

    cootie::cootie()
    : numLeg(0)
    , numHead(0)
    , ...
    {
    }
};
0
जोड़ा
नहीं, डिफ़ॉल्ट डिफ़ॉल्ट-प्रारंभ, जो पूर्णांक के लिए अप्रारंभीकृत का मतलब है।
जोड़ा लेखक chris, स्रोत
ओह, तुम सही हो वहां बहुत जल्दी था। उत्तर अपडेट किया गया।
जोड़ा लेखक harald, स्रोत