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

Przykład 25.7 i string

Ostatnio zmodyfikowano 2009-07-22 12:50
Autor Wiadomość
SideC
Temat założony przez niniejszego użytkownika
Przykład 25.7 i string
» 2009-07-22 09:43:02
Próbowałem poszerzyć przykład 25.7 następująco:
C/C++
//Plik: main.cpp
#include <iostream>
#include <conio.h>
#include "nazwaPliku.hpp"
using namespace std;
int main()
{
    cout << "Wynik dodawania 1 to: " << dodajLiczby( 10, 15 ) << endl;
    cout << "Wynik dodawania 2 to: " << dodajStringi( "s1", "s2" ) << endl;
    getch();
    return( 0 );
}
C/C++
//Plik: nazwaPliku.hpp
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp
int dodajLiczby( int a, int b );
std::string dodajStringi( std::string s1, std::string s2 );
#endif
C/C++
//Plik: nazwaPliku.cpp
#include "nazwaPliku.hpp"
int dodajLiczby( int a, int b )
{ return( a + b ); }
std::string dodajStringi( std::string s1, std::string s2 )
{ return( s1 + s2 ); }
Proszę o pomoc - czego chce od projektu kompilator: "expected constructor"?
P-8687
pekfos
» 2009-07-22 10:24:28
std::string?? nie znam tego - mówi kompilator
dopisz
C/C++
#include <string>
w pliku .hpp
P-8688
eBbi
» 2009-07-22 10:29:15
std::string?? nie znam tego - mówi kompilator

no nie wiem ;P... moim zdaniem to znaczy że oczekuje konstruktora.
P-8691
SideC
Temat założony przez niniejszego użytkownika
» 2009-07-22 10:52:57
Dzięki, pekfos, z #include <string> działa.
Wprawdzie nie rozumiem, czemu ta biblioteka w .hpp musi być (a w main.cpp - nie), ale chyba trzeba się z tym pogodzić.
P-8693
pekfos
» 2009-07-22 11:08:28
bo dodając iostream dodawane do main jest także string
P-8694
GoldWolf
» 2009-07-22 12:46:20
Wprawdzie nie rozumiem, czemu ta biblioteka w .hpp musi być (a w main.cpp - nie), ale chyba trzeba się z tym pogodzić.Z niczym nie musisz się godzić, dałeś
C/C++
//Plik: main.cpp
#include <iostream>
#include <conio.h>
#include "nazwaPliku.hpp" //<- tu jest link do pliku

// w pliku //Plik: nazwaPliku.hpp
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp
int dodajLiczby( int a, int b );
std::string dodajStringi( std::string s1, std::string s2 );
#endif // <- i tu jest zonk bo kompilator nie wie co to jest string

//mógłbyś sobie zrobić tak
// w pliku nazwaPliku.hpp
#ifndef nazwaPliku_hpp
#define nazwaPliku_hpp
#include <iostream>
#include <conio.h>
#include <string>
int dodajLiczby( int a, int b );
std::string dodajStringi( std::string s1, std::string s2 );
#endif

// a w pliku
//Plik: main.cpp
#include "nazwaPliku.hpp" //<- tylko to wystarczy
Dziwie się, że sobie nie popróbowałeś...
P-8701
SideC
Temat założony przez niniejszego użytkownika
» 2009-07-22 14:05:53
Dzięki Dante, w końcu to do mnie dotarło.
Dzięki Fanael, myślę, że chodziło o zasadę.
P-8707
manfred
» 2009-07-22 12:42:25
Ta, a do <valarray> dodawane jest <locale>. Nie ma tak - jeśli dołączysz <iostream>, to <string> też musisz dołączyć. Przynajmniej jeśli kod ma się kompilować pod większą liczbą kompilatorów niż jedną wersją jednego kompilatora pod jeden system operacyjny.
//Wiem, że strumienie iostreamowe muszą mieć char_traits, a standard mówi, że to jest w <string>. Nie, nie ma tak fajnie - char_traits może być położone w oddzielnym headerze, który jest dołączany w <string> i <iostream>. Wszystkie zależności headerów biblioteki standardowej są, nomen omen, zależne tylko i wyłącznie od implementacji. //Fanael
P-19079
« 1 » 2
  Strona 1 z 2 Następna strona