SideC Temat założony przez niniejszego użytkownika |
Przykład 25.7 i konsola » 2009-07-22 13:48:15 Nawiązując do przykładu ze stringiem, znowu nie mogę dać sobie rady z plikiem nagłówkowym: #include <iostream> #include <conio.h> #include "nazwaPliku.hpp" int main() { cout << "Wynik dodawania to: " << dodajStringi( "s1", "s2" ) << endl; getch(); return( 0 ); }
#ifndef nazwaPliku_hpp #define nazwaPliku_hpp #include <string> #include "console.ddt" using namespace std; using namespace ddt::console; string dodajStringi( string s1, string s2 ); #endif
#include "nazwaPliku.hpp" string dodajStringi( string s1, string s2 ) { gotoxy( 1, 5 ); return( s1 + s2 ); }
Dlaczego kompilator pisze o wielokrotnej definicji funkcji konsoli (wymienia wszystkie)? Jak używać wobec tego funkcje konsoli w nazwaPliku.cpp? |
|
Patzick |
» 2009-07-22 15:53:24 i jak dodasz ddtconsole.h do tego pliku .cpp, to musisz użyć namespace'a albo wpisać ddt::console::gotoxy( 1, 5 ); Bo inaczej kompilator nie wyłapie funkcji, tak samo jakbyś używał cout<< bez wpisania wcześniej using namespace std; Hmm chyba, że się mylę i wystarczy to wpisać tylko w pliku nagłówkowym :P |
|
SideC Temat założony przez niniejszego użytkownika |
» 2009-07-23 08:01:40 Wpisałem w nagłówkowym, który wygląda teraz tak: #ifndef nazwaPliku_hpp #define nazwaPliku_hpp #include <string> #include "ddtconsole.h" using namespace std; using namespace ddt::console; string dodajStringi( string s1, string s2 ); #endif
ale tego nie rozumiem, bo w całym kursie jest jak użyłem poprzednio. Kompilacja po zmianie, tak jak poprzednio, daje błędy: multiple definition of 'ddt::console::init()' first defined here i te 2 linijki są powielane dla każdej z funkcji zawartej w ddtconsole. |
|
GoldWolf |
» 2009-07-23 10:27:41 ale tego nie rozumiem, bo w całym kursie jest jak użyłem poprzednio.Ogólnie pracuje nad kursem i w najbliższych tygodniach będzie treść rozszerzona. A tak wygląda rozwiązanie: #include "nazwaPliku.hpp" int main() { cout << "Wynik dodawania to: " << dodajStringi( "s1", "s2" ) << endl; getch(); return( 0 ); }
#include "nazwaPliku.hpp" #include "console.ddt" using namespace ddt::console; string dodajStringi( string s1, string s2 ) { gotoxy( 1, 5 ); return( s1 + s2 ); }
#ifndef nazwaPliku_hpp #define nazwaPliku_hpp
#include <iostream> #include <conio.h> #include <string>
using std::string; using std::cout; using std::endl; string dodajStringi( string s1, string s2 );
#endif
Za mało próbowałeś widzę ;-/, nie możesz się trzymać ściśle kursu, ponieważ każdy program ma swój osobny rozdział. |
|
SideC Temat założony przez niniejszego użytkownika |
» 2009-07-23 13:59:16 Widać, za szybko się załamuję. To co napisałeś rzeczywiście działa. Myślę jednak, że biblioteka konsoli musi się jakoś znaleźć w pliku nagłówkowym - tak jak napisałeś nie kompiluje się, gdy dołożymy w pliku main() jakąś funkcję konsoli. Przepraszam, że drążę po kawałku, ale trudno mi jest jeszcze ogarnąć wszystko na raz. |
|
GoldWolf |
» 2009-07-23 14:20:19 Przepraszam, że drążę po kawałku, ale trudno mi jest jeszcze ogarnąć wszystko na raz.To bardzo dobrze, sam do końca nie potrafię ci tego wytłumaczyć, ale też się uczę i na pewno do tego dojdę i będzie to zawarte w kursie. |
|
DejaVu |
» 2009-07-23 14:59:53 Jeśli tworzysz projekt wszędzie musisz mieć: Wydaje mi się, że Ty w kilku plikach masz: |
|
SideC Temat założony przez niniejszego użytkownika |
» 2009-07-24 09:16:18 Dziękuję wszystkim. Należało od razu posłuchać Fanaela i na tym sposobie się skupić. Reasumując, kompiluje się w takiej postaci: #ifndef nazwaPliku_hpp #define nazwaPliku_hpp
#include <iostream> #include <conio.h> #include <string> #include "ddtconsole.h" using namespace std; using namespace ddt::console;
#endif
#include "nazwaPliku.hpp"
#include "nazwaPliku.hpp" int main() { }
|
|
« 1 » 2 |