Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » vector in header macht fehler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
31.03.2005, 20:23 Uhr
~MamboKurt
Gast


hallo,
ich wollt grad mal in einer header datei den vector header inlcuden. bis dahin hat auchc alles funktioniert. als ich dann aber einen vector erstellen wolltehat er gemeckert.


C++:
//strfunc.h
#ifndef strfunc_h_
#define strfunc_h_

#include <math.h>
#include <vector>
#include "control.h"

vector<char> operators();//Zeile 8//<<--hier meckert er schon
vector<float> operands();//Zeile 9//<<--und hier auch

void calc(void)
{
     //irgendwelcher code
}

float strfunc(char* func)
{
    vector<char> operators();//<<--ich hab versuch die deklaration oben durch diese zu ersetzten, hat aber nix gebracht
    vector<float> operands();
  
    //irgendwelcher code

}

#endif



Fehler:

C++:
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(8) : error C2143: Syntaxfehler : Fehlendes ';' vor '<'
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(8) : error C2501: 'vector' : Fehlende Speicherklasse oder Typbezeichner
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(8) : error C2143: Syntaxfehler : Fehlendes ';' vor '<'
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(9) : error C2143: Syntaxfehler : Fehlendes ';' vor '<'
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(9) : error C2501: 'vector' : Fehlende Speicherklasse oder Typbezeichner
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(9) : error C2086: 'vector' : Neudefinition
c:\programme\microsoft visual studio\myprojects\2varfunk\strfunc.h(9) : error C2143: Syntaxfehler : Fehlendes ';' vor '<'




C++:
//main.cpp
#include <cstdlib>
#include <iostream>
#include <vector>
#include <math.h>
//#include "control.h" <<eigener header
#include "strfunc.h"

using namespace std;

int main(int argc, char *argv[])
{
    char *str;
    vector<char> operators(12);//<<hier
    vector<char*> operands();//<<und hier meckerst er nicht

    return 0;
}



kann mir jemand sagen, woran das liegt und wie ich das beheben kann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.03.2005, 20:47 Uhr
(un)wissender
Niveauwart


Ersten ist es std::vector und nicht vector, dass fehlt in deinem Header, zweitens ist

C++:
float strfunc(char* func)
{
    vector<char> operators();//<<--ich hab versuch die deklaration oben durch diese zu ersetzten, hat aber nix gebracht
    vector<float> operands();
  
    //irgendwelcher code

}


die Neudefinition von den Funktionen operators() und operands(). Vermutlich will du die aber aufrufen und den Rückgabewert speichern:

C++:
float strfunc(char* func)
{
    std::vector<char> vec = operators();//<<--ich hab versuch die deklaration oben durch diese zu ersetzten, hat aber nix gebracht
    std::vector<float> vec2 = operands();
  
    //irgendwelcher code

}


Lies mal die Fehlermeldungen des Compiler, der hat dir das alles gesagt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.03.2005, 23:25 Uhr
typecast
aka loddab
(Operator)


->
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.04.2005, 12:11 Uhr
Th



Funktionen dürfen nicht in Header-Dateien deklariert werden (außer inline oder templates)!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.04.2005, 12:14 Uhr
(un)wissender
Niveauwart


Huh?
Klar deklariert man die in Headerdateien, woanders ist schlecht Stil. Man kann die Funktionen sogar in Headerdateien definieren, überhaupt kein Problem (wenn auch bei inline oder templates schlechter Stil).
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.04.2005, 13:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nur gibts probleme wenn man die funktionen in headern definiert wenn man diesen header dann mehrmals benutzt. Deklarieren kann man sie jederzeit im header, man muss nur aufpassen das weitere benötigte header dann nicht unnötige abhängigkeiten erzeugen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.04.2005, 14:45 Uhr
Th



meinte natürlich "nicht definiert werden". (war noch früh am Tag, als ich es schrieb...)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.04.2005, 15:58 Uhr
(un)wissender
Niveauwart


@Flosoft
Include guards muss man eh verwenden, das Problem existiert also nicht. Die Header ist gerade zum deklarieren da...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.04.2005, 16:22 Uhr
Th



Aber der Linker beschwert sich, wenn die gleiche Funktion in mehreren Objektdateien definiert ist (d.h. 2 oder mehr Source-Dateien den selben Header einbinden, in dem eine Funktion DEFINIERT ist). Da nützen auch keine Include-Guards...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.04.2005, 18:50 Uhr
(un)wissender
Niveauwart


Nein. Davor schützen die Include-Guards (es wird nur genau einmal definiert bzw. deklariert). Genau für sowas sind die da. Nach deiner Logik würden keine templates und inlines funktionieren. Was allerdings problematisch ist, die gleiche Funktionen (gleiche Signatur) in verschiedenen Header zu deklarieren, also mit verschiedenen Include-Guards zu schützen. Das kann dann, wenn ein Source datei beideHeader einbindet, Ärger geben.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: