Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przykład 25.7 i konsola

Ostatnio zmodyfikowano 2009-07-22 15:58
Autor Wiadomość
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:
C/C++
//Plik: main.cpp
#include <iostream>
#include <conio.h>
#include "nazwaPliku.hpp"
int main()
{ cout << "Wynik dodawania to: " << dodajStringi( "s1", "s2" ) << endl;
    getch();
    return( 0 ); }
C/C++
//Plik: nazwaPliku.hpp
#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
C/C++
//Plik: nazwaPliku.cpp
#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?

P-8705
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
P-8710
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:
C/C++
//Plik: nazwaPliku.hpp
#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.
P-8724
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:
C/C++
//Plik: main.cpp
#include "nazwaPliku.hpp"
int main()
{
    cout << "Wynik dodawania to: "
    << dodajStringi( "s1", "s2" )
    << endl;
   
    getch();
    return( 0 );
}

C/C++
//Plik: nazwaPliku.cpp
#include "nazwaPliku.hpp"
#include "console.ddt"
using namespace ddt::console;
string dodajStringi( string s1, string s2 )
{
    gotoxy( 1, 5 );
    return( s1 + s2 );
}

C/C++
//Plik: nazwaPliku.hpp
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp
//--------------------
#include <iostream>
#include <conio.h>
#include <string>
//using namespace std; <-zamiast tak
// mozna tak
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ł.
P-8725
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.
P-8733
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.
P-8736
DejaVu
» 2009-07-23 14:59:53
Jeśli tworzysz projekt wszędzie musisz mieć:
C/C++
#include "ddtconsole.h"
Wydaje mi się, że Ty w kilku plikach masz:
C/C++
#include "console.ddt"
P-8740
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:
C/C++
//Plik: nazwaPliku.hpp
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp
//--------------------
#include <iostream>
#include <conio.h>
#include <string>
#include "ddtconsole.h"
using namespace std;
using namespace ddt::console;
//---------------------
// tu deklaracje funkcji
#endif
C/C++
//Plik: nazwaPliku.cpp
#include "nazwaPliku.hpp"
// tu funkcje zawierające m.in. stringi i wywołania funkcji konsoli
C/C++
//Plik: main_nazwaPliku.cpp
#include "nazwaPliku.hpp"
int main()
{
    // zawiera m.in. wywołania funkcji konsoli
}
P-8746
« 1 » 2
  Strona 1 z 2 Następna strona