PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit makefile


pajofego
2006-05-02, 23:19:55
Hallo miteinander,

ich versuche gerade Code mit dem mingw gcc zu kompilieren. Dazu gibt es eine Fehlermeldung:

Mesh_Mode.h 47:error: there are no arguments to 'size' that depend on a template parameter, so a declaration of 'First' must be available:

error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)

Daraufhin habe ich im makefile die flags wie in der Fehlermeldung beschrieben mit fpermissive erweitert:


CC = gcc
CFLAGS = -Wall -O3 -fpermissive
LDFLAGS =
CXX = g++
CXXFLAGS = -O3 -fpermissive
AR = ar
LIBOPT = rscv

Leider will er das auch nicht kompillieren und bringt weiterhin einen error anstatt eines warnings!

Hat einer einen Tipp für mich?

Danke,

Gruß

pajofego

Coda
2006-05-02, 23:43:10
Was bringt er denn jetzt für einen Error?

Ach so: Lass mich raten, du benützt GCC 4?

pajofego
2006-05-02, 23:50:01
Coda[/POST]']Was bringt er denn jetzt für einen Error?

Ach so: Lass mich raten, du benützt GCC 4?

Nein, da ändert sich gar nichts...die Fehler bleiben gleich :confused:

Die Version ist gcc 3.4.2 (mingw-special)

Coda
2006-05-02, 23:59:41
Wird der Compiler denn auch mit der Flag aufgerufen? (Das siehst du normal wenn das Makefile durchläuft)

pajofego
2006-05-03, 00:08:12
Coda[/POST]']Wird der Compiler denn auch mit der Flag aufgerufen? (Das siehst du normal wenn das Makefile durchläuft)

mmmh guter Hinweis...ich glaube nicht! Muss das nochmal genauer anschauen.

pajofego
2006-05-03, 00:15:12
Hi,

ich konnte im output-Fenster keinen Hinweis finden, die zeigen, dass er den Flag mitnimmt. Unten habe ich das makefile drangehängt, welches ich an einigen Stellen von Hand selbst geändert habe. Hast du eine Idee wo man noch rumschrauben könnte.

Danke,

Gruß

pajofego


CC = gcc
CFLAGS = -Wall -O3 -fpermissive
LDFLAGS = -fpermissive
CXX = g++
CXXFLAGS = -O3 -fpermissive
AR = ar
LIBOPT = rscv
HEADERS = gid_mesh_parser.tab.cc gid_mesh_parser.tab.hh
OBJ = gid_mesh_reader.o gid_mesh_scanner.o
INCPATH = -I../mesh_lib
LIBPATH = -L../mesh_lib
LIBS = -lMesh
.SUFFIXES:
.SUFFIXES: .c .cc .cxx .o

.c.o: $@ $(HEADERS); $(CC) $(CFLAGS) $(INCPATH) -c $<
.cc.o: $@ $(HEADERS); $(CXX) $(CXXFLAGS) $(INCPATH) -c $<
.cxx.o: $@ $(HEADERS); $(CXX) $(CXXFLAGS) $(INCPATH) -c $<

ZIEL = gid_mesh_reader


all: $(ZIEL)

../mesh_lib/libMesh.a:
cd ../mesh_lib; mingw32-make.exe
gid_mesh_reader: $(OBJ) ../mesh_lib/libMesh.a
$(CXX) $(LDFLAGS) -o $@ $(LIBPATH) $(OBJ) $(LIBS)
install: $(ZIEL)
cp $(ZIEL) ../bin
clean:
rm -f $(ZIEL) $(OBJ)

Coda
2006-05-03, 00:35:36
Kannst du den Output vom Make-Lauf auch noch anhängen?

Xmas
2006-05-03, 01:11:52
Wie wäre es mit dem Code, der den Fehler erzeugt?

Coda
2006-05-03, 01:32:16
Ich dachte er will irgend eine Library kompilieren. Die würde er ja schlecht fixen können...

pajofego
2006-05-03, 18:10:36
Hi der Code ist nicht von mir! Ist mir zum compilieren gegeben worden. Ich habe die besagten Stellen fett markiert. Von templates habe ich noch keine Ahnung.

Gruß

pajofego

template<class C> class Node_Vektor:public vector<C>{
public:
typename Node_Vektor<C>::reference operator[]
(typename Node_Vektor<C>::size_type n) {
if(n<=0) throw out_of_range("Node_Vektor: Index zu klein!\n");
if(n>size()) throw out_of_range("Node_Vektor: Index zu groß!\n");
return vector<C>::operator[](n-1);
}
typename Node_Vektor<C>::const_reference operator[]
(typename Node_Vektor<C>::size_type n) const{
if(n<=0) throw out_of_range("Node_Vektor: Index zu klein!\n");
if(n>size()) throw out_of_range("Node_Vektor: Index zu groß!\n");
return vector<C>::operator[](n-1);
}
friend istream& operator>> <C> (istream &,Node_Vektor<C>&);
friend ostream& operator<< <C> (ostream &,const Node_Vektor<C>&);

};

pajofego
2006-05-04, 18:08:03
Ich wollte nochmal freundlich nachfragen, ob mir hier jemand bei dem oben geposteten Code helfen könnte.

Der Fehler:

Mesh_Mode.h 47:error: there are no arguments to 'size' that depend on a template parameter, so a declaration of 'First' must be available:

error: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)

Ist immer noch vorhanden.

Danke

Gruß

pajofego

Xmas
2006-05-04, 21:43:16
Schreib mal this->size() statt size().

pajofego
2006-05-04, 23:00:23
Hi Xmas,

das hat funktioniert! Jetzt versuche ich andere Teile zu compilieren und da steigt der compiler ebenso aus...! :mad:

Mensch das ist ja voll der Krampf wenn der Compiler alten Code nicht so einfach schlucken will!

Danke erst einmal...!

Gruß

pajofego