Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Anfänger brauche hilfe

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
27.05.2008, 15:24 Uhr
~Irods
Gast


Hi ich hab gerade mit c++ angefangen und das unten stehende Programm zum test für referencen geschrieben aber es funzt nich xD bye und schon ma danke


C++:
//Quelldatei1
#include <iostream>
#include <string>
using namespace std;

void test( string );
string line="Hallo";

int main()
{

    test(line);
    cin.get();
    return 0;
}



C++:
//Quelldatei2
#include <iostream>
#include <string>
using namespace std;

void test( const string& lol)
{
    cout<<lol;
}



Bearbeitung von 0xdeadbeef:

cpp-Tags eingefügt, nächstes mal selbst machen.


Dieser Post wurde am 27.05.2008 um 21:18 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.05.2008, 16:37 Uhr
Tommix



Hallo,
Du machst es uns leichter, wenn Du schreibst was "nicht funzt".
Die Signaturen in Funktionsdeklaration und -definition stimmen nicht überein:
Einmal

C++:
void test(string);


und dann

C++:
void test(const string& lol)
// ...



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.05.2008, 16:40 Uhr
Lensflare



und außerdem musst du Quelldatei2 in der Quelldatei1 includieren:


C++:
#include "quelldatei2.h"



Falls die Datei so heisst.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.05.2008, 17:15 Uhr
xXx
Devil


main.cpp

C++:
#include <iostream>
#include <string>
#include "echo.hpp"

int main()
{
    const std::string sample("Hallo Welt!");
    echo(sample);

    std::cin.ignore();
}


Echo.hpp

C++:
#if !defined (ECHO_HPP__INCLUDED)
#define ECHO_HPP__INCLUDED

#include <iostream>
#include <string>

void echo(std::string const& string)
{ std::cout<< string; }

#endif // ECHO_HPP__INCLUDED
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.05.2008, 18:18 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du eine Funktionsimplementierung in einen Header packen willst, musst du die Funktion inline deklarieren - sonst kriegt der Linker Probleme, sobald du die Funktion in mehr als einer Übersetzungseinheit benutzt.

Besser aber:

C++:
// echo.hpp
#ifndef INCLUDED_ECHO_HPP
#define INCLUDED_ECHO_HPP

#include <string>

void echo(std::string const &s);

#endif



C++:
// echo.cpp
#include "echo.hpp"

#include <iostream>

void echo(std::string const &s) {
  std::cout << s << std::endl;
}



C++:
// main.cpp
#include "echo.hpp"

int main() {
  echo("foo");
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.05.2008, 18:20 Uhr
Tommix



@Lensflare/XXX:
Nein, das ist so nicht richtig. Solange beide Quelltexte gelinkt werden, genügt es die Deklaration in die zweite Datei zu schreiben statt in einen Header (wenn auch eher unüblich).
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.05.2008, 18:22 Uhr
0xdeadbeef
Gott
(Operator)


Das funktioniert nur in C, bis C89. C++ verlangt eine Deklaration. C++ muss auch eine Deklaration verlangen, sonst wird das mit Referenzübergabe und Polymorphie allgemein ziemlich kompliziert.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.05.2008, 20:34 Uhr
~Irods
Gast


Danke Leutz hab den fehler hab was im Prototypen falsch gemacht.
PS: inludieren bruach ich nich weil ich g++ nutze (sag ich nächst ma gleich) sry thx bye

und von mir aus //closed xD^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.05.2008, 21:15 Uhr
0xdeadbeef
Gott
(Operator)


Das hat mit dem Compiler wenig zu tun. #include fügt ja auch bloß den Inhalt der entsprechenden Datei an der Stelle, an der es steht, ein, bevor der Kram zum Compiler geht. In deinem Fall ersetzt der fett markierte Teil die #include-Anweisung:

C++:
//Quelldatei1
#include <iostream>
#include <string>
using namespace std;

void test(string const &);

int main() {
  // globale Variablen sind übrigens böse, pack das besser in main
  string line="Hallo";

  test(line);
  cin.get();
  return 0;
}


...bei sinnvoller Aufteilung mit #include sieht das Ergebnis des Präprozessors ganz ähnlich aus. Nimm zum Beispiel mein Beispiel oben, da wird

C++:
// main.cpp
#include "echo.hpp"

int main() {
  echo("foo");
}


expandiert zu

C++:
// main.cpp
// echo.hpp
#ifndef INCLUDED_ECHO_HPP
#define INCLUDED_ECHO_HPP

#include <string>

void echo(std::string const &s);

#endif

int main() {
  echo("foo");
}


...und dann behandelt wie

C++:
// main.cpp
// echo.hpp

#include <string>

void echo(std::string const &s);


int main() {
  echo("foo");
}


...wobei "#include <string>" durch den Inhalt des Systemheaders string ersetzt wird, der je nach System unterschiedlich und aller Wahrscheinlichkeit nach ziemlich lang ist. (Compilerspezifische Einschübe der Einfachheit halber ausgelassen) Was dabei rauskommt, wird dann an den eigentlichen Compiler übergeben, der dir deine .o-Datei erstellt.

Du kannst dir übrigens ankucken, was der GNU cpp ausspuckt. Kompilier mal eine Source-Datei mit g++ -save-temps, dann schau in die .i-Datei.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.05.2008 um 21:17 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.05.2008, 07:37 Uhr
Tommix




Zitat von 0xdeadbeef:
Das funktioniert nur in C, bis C89. C++ verlangt eine Deklaration. C++ muss auch eine Deklaration verlangen, sonst wird das mit Referenzübergabe und Polymorphie allgemein ziemlich kompliziert.

'Morgen,
was ich schrieb war:

Zitat:

... genügt es die Deklaration in die zweite Datei zu schreiben statt in einen Header (wenn auch eher unüblich)

Man kann den Header sozusagen abtippen.

- Tommix
 
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: