Warum bin ich immer error: initializing argument 1 of 'Element::Element(int)" [- fpermissive] in Eclipse, wenn ich versuche zu kompilieren mein C++ - code?
Ich bin neu bei C++, und haben schließlich aufgegeben zu versuchen, diese zu kompilieren, nachdem starrte es für zu lange. Der compiler scheint die Ablehnung der Konstruktor Prototyp in der header-Datei aus irgendeinem Grund... ich kann nicht herausfinden, was falsch mit es.
Element.h:
#ifndef ITEM_H_
#define ITEM_H_
class Item {
public:
Item(int); //This line is what Eclipse keeps flagging up with the error in the title
virtual ~Item();
Item* getNextPtr();
int getValue();
void setNextPtr(Item *);
};
#endif /* ITEM_H_ */
In meinem Item.cpp Datei habe ich:
int val;
Item* nextPtr = 0;
Item::Item(int value) {
val = value;
}
Item* Item::getNextPtr() {
return nextPtr;
}
void Item::setNextPtr(Item *nextItem) {
nextPtr = nextItem;
}
int Item::getValue() {
return val;
}
Item::~Item() {
//TODO Auto-generated destructor stub
}
Hoppla, ich bin mit dem GCC Compiler. Und ja, Sie hätte member-Variablen! Wie gehe ich über das tun, dass mit diesem format? Der code wo ich instanziieren Element unten. Ich bin mir bewusst, dass es keine Globale Variablen, die entweder...
#include "LinkList.h"
#include "Item.h"
Item* first = 0;
int length = 0;
LinkList::LinkList(int values[], int size) {
length = size;
if (length > 0) {
Item firstItem = new Item(values[0]);
Item *prev = &firstItem;
first = &firstItem;
for (int i = 0; i < size; i++) {
Item it = new Item(values[i]);
prev->setNextPtr(&it); //set 'next' pointer of previous item to current item
prev = ⁢ //set the current item as the new previous item
}
}
}
LinkList::~LinkList() {
for (int i = 0; i < length; i++) {
Item firstItem = *first;
Item *newFirst = firstItem.getNextPtr();
delete(first);
first = newFirst;
}
}
int LinkList::pop() {
Item firstItem = *first;
first = firstItem.getNextPtr();
return firstItem.getValue();
}
Ich habe gerade bemerkt einen Fehler mit der Funktionalität von pop() und Destruktor-Funktionen... bitte ignorieren, ich will einfach nur, um herauszufinden, was falsch mit der Instanziierung des Elements.
GCC-Fehler:
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\LinkList.o" "..\\src\\LinkList.cpp"
..\src\LinkList.cpp: In constructor 'LinkList::LinkList(int*, int)':
..\src\LinkList.cpp:16:38: error: invalid conversion from 'Item*' to 'int' [-fpermissive]
..\src\/Item.h:14:2: error: initializing argument 1 of 'Item::Item(int)' [-fpermissive]
..\src\LinkList.cpp:20:32: error: invalid conversion from 'Item*' to 'int' [-fpermissive]
..\src\/Item.h:14:2: error: initializing argument 1 of 'Item::Item(int)' [-fpermissive]
21:24:26 Build Finished (took 256ms)
Ich glaube wirklich, Sie wollen tatsächlich, dass
val
und nextPtr
member-Variablen Item
eher als globals...Sie sind nicht beim initialisieren
Item
überall im geposteten code...Eclipse ist eine IDE, kein compiler. Es wäre hilfreich zu wissen, welchen compiler Sie verwenden, zusammen mit einem SSCCE, die das problem reproduziert. Es gibt nichts syntaktisch falsch mit Ihrem code. Aber warum auf der Erde Sie initialisiert eine Globale variable mit dem argument des Konstruktors?
g++ - reporting-zwei Fehler, nicht vier. Jeder Fehler enthält zwei Standorten es denkt, möchten Sie vielleicht, zu betrachten. Element.h ist in Ordnung, aber LinkList.cpp fälschlicherweise versucht eine Erklärung im Artikel.h.
InformationsquelleAutor user1804523 | 2013-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier:
Erstellen Sie ein neues Element mit einem Element-Zeiger als argument. Das ist das gleiche wie:
Sein und es sollte:
gibt es ähnliche Fehler in den code, und Sie müssen, um Sie zu beheben zu können. Ich verstehe nicht, Ihre Frage oben aber.
Ja, ich habe Sie bemerkt, danke. Ich meine, wie würden Sie das umschreiben, was ich derzeit in Item.cpp so, die val ist eine member-variable ist?
fügen Sie einen privaten member
val
zu denItem
Klasse, und entfernen Sie dieval
von cpp. Das sollte es tun.InformationsquelleAutor perreal