Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Software » 2 *.cpp-files

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 <
010
16.05.2004, 20:20 Uhr
Pablo
Supertux
(Operator)


Aber welche Fehlermeldungen bekommst du?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
17.05.2004, 13:32 Uhr
RedEagle




Code:
3 C:\WINDOWS\PROFILES\xxx\DESKTOP\zahlen-raten\test.cpp
  `cout' undeclared (first use this function)

4 C:\WINDOWS\PROFILES\+++\DESKTOP\zahlen-raten\test.cpp
  `pause' undeclared (first use this function)

G__~1.EXE C:\WINDOWS\PROFILES\RALF\DESKTOP\ZAHLEN~1\G__~1.EXE
                ../zahlen-raten/test.o: No such file or directory.


--
MFG RedEagle

Dieser Post wurde am 17.05.2004 um 15:28 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
17.05.2004, 14:34 Uhr
Spacelord
Hoffnungsloser Fall


Deine Dateien haben während der Compilierung nichts miteinander zu tun!
Du könntest die Dateien ja auch seperat in Objectfiles übersetzen und anschliessend erst linken.
Test.cpp weiß nicht das iostream in main inkludiert ist!
Das gleiche ist es mit deinem pause-Define.Test.cpp weiß da nix von!
Überhaupt ist das Ganze sehr "modular" und geht an der schönen Welt der Klassen doch ziemlich vorbei.Code der zusammengehört sollte auch zusammen bleiben.


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
17.05.2004, 20:04 Uhr
RedEagle



ja, aber finde in 1000 Zeilen code erstmal dir richtige funktion
Ich finde das dann schon leichter, wenn man verschiedene Teile Trennen kann, so wie man große Probleme in kleine Funktionen teilt.
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
18.05.2004, 09:44 Uhr
~Spacelord
Gast


Und genau dafür gibt es Headerdateien .....

MfG Spacelord
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
18.05.2004, 11:30 Uhr
RedEagle



ja, aber die Header-datein können nicht auf globale variablen oder funktionen der main-datei zugreifen.
In der datei ist nähmlich ne Funktion, die werte aus einer ini liest und in Globale variablen schreibt. diese werte sind wichtig für das aussehen (textcolor).
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
20.05.2004, 14:48 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
heute hab ich mal nen bisschen Zeit um da näher drauf eingehen zu können.
Du scheinst ja vorzuhaben so ne Art Funktionsbibliothek zu schreiben.

Zitat:
RedEagle postete
ja, aber die Header-datein können nicht auf globale variablen oder funktionen der main-datei zugreifen.


Wenn deine Funktionsbibliothek von globalen Variablen in ner anderen Datei abhängt ist das ohnehin schonmal Schrott.
Aus deinen bisherigen Schilderungen folger ich dass du etwas in dieser Art machen möchtest:

main.cpp


C++:
#include <iostream>
#include <windows.h>

WORD setScreenColor();
WORD getOldSettings();
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO conInfo;
WORD farbe;

int main()
{
farbe= getOldSettings();
setScreenColor();
std::cout<<"Hallo RedEagle!"<<endl;

return 0;
}


g++ -c main.cpp

color.cpp

C++:

#include<windows.h>

WORD getOldSettings()
{
//Der Einfachheit halber setze ich hier einfach nen Wert
//anstatt ihn aus ner Datei auszulesen
WORD temp = FOREGROUND_RED|BACKGROUND_BLUE;
return temp;
}

void setScreenColor()
{
DWORD pufferGroesse;
DWORD rueckgabe;
COORD curPos={0,0};
extern HANDLE hStdOut;
extern CONSOLE_SCREEN_BUFFER_INFO conInfo;
extern WORD farbe;
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut,&conInfo);
pufferGroesse = conInfo.dwSize.X * conInfo.dwSize.Y;
FillConsoleOutputAttribute(hStdOut,farbe,pufferGroesse,curPos,&rueckgabe);
SetConsoleTextAttribute(hStdOut,farbe);
}

  

g++ -c color.cpp
g++ -o farbe.exe main.o color.o

Jetzt hast du globale Variablen die eigentlich garnichts in main zu suchen haben und obendrein noch,in der Datei wo sie benötigt werden,als extern gekennzeichnet werden müssen.Desweiteren musst du jedesmal die Prototypen der Funktionen aus deiner "Lib" von Hand deklarieren.
Also die Prototypen kannst du schonmal locker in nen Header packen!
Und die Variablen die deine Bibliotheksfunktionen benötigen kannst du auch in den Header packen.Die Funktionen benötigen die Variablen also gehören die auch dahin!!


Zitat:
RedEagle postete
In der datei ist nähmlich ne Funktion, die werte aus einer ini liest und in Globale variablen schreibt. diese werte sind wichtig für das aussehen (textcolor).

Warum musst du die Werte in globale Variablen schreiben???
Du kannst die doch der Funktion aus deiner Bibliothek als Parameter übergeben.
Eine zweite Version die schon eher einer Funktionsbibliothek ähneln würde sehe eventuell so aus:

main2.cpp


C++:
#include <iostream>
#include "color.h"

int main()
{
setScreenColor(getOldSettings());
std::cout<<"Hallo RedEagle!"<<endl;

return 0;
}


g++ -c main2.cpp

color2.h


C++:
#ifndef __COL_
#define __COL_

#include <windows.h>
//in diesem Kontext ist static eine Art private für Arme
static HANDLE hStdOut;
static CONSOLE_SCREEN_BUFFER_INFO conInfo;
static DWORD pufferGroesse;
static DWORD rueckgabe;
static COORD curPos={0,0};
void setScreenColor(WORD);
WORD getOldSettings();

#endif



color2.cpp


C++:
#include "color.h"
WORD getOldSettings()
{
//Der Einfachheit halber setze ich hier einfach nen Wert
//anstatt ihn aus ner Datei auszulesen
WORD temp = FOREGROUND_RED|BACKGROUND_BLUE;
return temp;
}

void setScreenColor(WORD farbe)
{
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut,&conInfo);
pufferGroesse = conInfo.dwSize.X * conInfo.dwSize.Y;
FillConsoleOutputAttribute(hStdOut,farbe,pufferGroesse,curPos,&rueckgabe);
SetConsoleTextAttribute(hStdOut,farbe);
}


Kompilieren wie gehabt mit
g++ -c color2.cpp
Exe erstellen: g++ farbe2.exe main2.o color2.o

Also,ich bilde mir mal ein dass diese Lösung schon deutlich "aufgeräumter" aussieht und weitaus besser gekapselt ist als der Mist mit den globalen Variablen,wobei die Variablen natürlich immer noch modulglobal sind aber eben wegen static nicht über extern von "ausserhalb" ansprechbar(wer will brauch natürlich nur den header zu ändern ).
Naja,mit C++,oder besser Objektorientierung hat das Ganze aber noch immer nichts zu tun.Ist nur etwas geordneter....

Also der Vollständigkeit halber noch ne ganz simple C++ Lösung:
LConsole.h


C++:
#ifndef _LConsole_H_
#define _LConsole_H_

#include <windows.h>

class LConsole
{
public:
     LConsole();
     void setScreenColor(WORD neueFarbe);
         WORD getOldSettings();
private:
     HANDLE hStdOut;
     CONSOLE_SCREEN_BUFFER_INFO ConInfo;
     DWORD PufferGroesse;
     DWORD RueckgabeDW;
     COORD CurPos;

};

#endif



LConsole.cpp


C++:
#include "LConsole.h"

LConsole::LConsole()
{
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdOut,&ConInfo);
CurPos.X = 0;
CurPos.Y = 0;

}

void LConsole::setScreenColor(WORD neueFarbe)
{
    GetConsoleScreenBufferInfo(hStdOut,&ConInfo);
    PufferGroesse = ConInfo.dwSize.X * ConInfo.dwSize.Y;
    FillConsoleOutputAttribute(hStdOut,neueFarbe,PufferGroesse,CurPos,&RueckgabeDW);
    SetConsoleTextAttribute(hStdOut,neueFarbe);
}

WORD LConsole::getOldSettings()
{
  return (FOREGROUND_RED|BACKGROUND_BLUE);
}





und die main noch:


C++:
#include <iostream>
#include "LConsole.h"

int main()
{
LConsole lc;
lc.setScreenColor(lc.getOldSettings());
std::cout<<"Hallo RedEagle!"<<endl;

return 0;
}



Vielleicht hab ich dich ja auch ganz falsch verstanden,aber lass mal die 3 Varianten auf dich einwirken und versuch mal Vor und Nachteile zu finden.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
20.05.2004, 19:01 Uhr
RedEagle





Ich beschreibs mal ganz genau:

In der main-datei sind.
~Globale Variablen fur Textcolor und Textbackground
~Funktionen, die oft benutzt werden

In die andere datei soll rein:
~Nur etwa 20 Funktione (für jeden Level eine)
die sehenb ungefähr so aus:

C++:
void mission01()
{
cout << "*missinosbeshcreibung*";
spiel(100); //eine Funktion aus der main-datei
}

void mission01()
{
cout << "*missinosbeshcreibung*";
spiel(1000); //eine Funktion aus der main-datei
}

//usw...


--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ Software ]  


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: