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

Poziom 4 Rozdział 34 Zadanie domowe nr 1 - Błąd przy kompilacji

Ostatnio zmodyfikowano 2018-08-18 13:22
Autor Wiadomość
W1ll_3ty
Temat założony przez niniejszego użytkownika
Poziom 4 Rozdział 34 Zadanie domowe nr 1 - Błąd przy kompilacji
» 2018-08-18 12:47:07
Witam,
rozwiązuję właśnie 1. zadanie domowe z podanego wyżej rozdziału i podczas kompilacji programu (według mnie skończonego) CodeBlocks przenosi mnie do innego "projektu" dokładniej o nazwie "ios_base.h" i pokazuje kilka nie zrozumiałych mi błędów ale w tym drugim kodzie(ios_base.h) W trakcie tworzenie tego tematu zauważyłem, że dwa błędy(które wpisałem na dole(dwa ostatnie)) odnoszą się do mojego programu. Sprawdziłem to w takim razie i z pomocą kursu doszedłem do tego, że przekazują uchwyt do pliku, podczas tworzenia argumentów funkcji nie tworzyłem tego uchwytu jako referencji. Nie rozumiem dlaczego trzeba tak robić, ale po poprawieniu tego (ifstream plik na ifstream & plik) program się kompiluje ale pojawia się okienko ale jest puste. Dodałem tu kod źródłowy ale w razie czego ten z błędami. Nowy różni się tylko dodaniem referencji w argumentach funkcji podczas tworzenia uchwytu do pliku. Proszę o pomoc :)
C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int przekazywanie( int & a, ifstream plik )
{
    plik >> a;
    if( plik.fail() )
         return false;
   
    return true;
}

int plikBlad( ifstream plik )
{
    char l;
    plik.clear();
    plik >> l;
}

int sumowanie( int a, int & suma, ifstream plik )
{
    cout << a << " ";
    suma += a;
}

int wczytywaniePliku()
{
    ifstream plik;
    int a;
    int suma = 0;
    plik.open( "nieprawidlowosci.txt" );
    if( !plik.good() )
         return false;
   
    while( true )
    {
        if( !plik.good() )
             break;
        else
        {
            while( !przekazywanie( a, plik ) )
                 plikBlad( plik );
           
            sumowanie( a, suma, plik );
        }
    }
    plik.close();
    cout << endl << suma;
}

int main()
{
    if( wczytywaniePliku == false )
         cout << "Nie udalo sie wczytac pliku.";
   
    return 0;
}

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\ios_base.h|849|error: 'std::ios_base::ios_base(const std::ios_base&)' is private|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\basic_ios.h|67|error: within this context|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|455|note: synthesized method 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' first required here |
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\streambuf|804|error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is private|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|72|error: within this context|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|455|note: synthesized method 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)' first required here |
C:\Users\Maciek\Desktop\C++\18.zaddom.cpp||In function 'int wczytywaniePliku()':|
C:\Users\Maciek\Desktop\C++\18.zaddom.cpp|41|note: synthesized method 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)' first required here |
C:\Users\Maciek\Desktop\C++\18.zaddom.cpp|6|note:   initializing argument 2 of 'int przekazywanie(int&, std::ifstream)'|
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
P-172159
pekfos
» 2018-08-18 12:49:57
Nie możesz przekazać pliku przez wartość, bo jest niekopiowalny.

C/C++
if( wczytywaniePliku == false )
To nie jest wywołanie funkcji.

Połowa twoich funkcji nie zwraca wartości, a określiłeś typ zwracany na int.
P-172160
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2018-08-18 12:54:16
A jeśli zmieniłbym to na
C/C++
if( bool spr = wczytywaniePliku == false )

Bo widziałem raz chyba w kursie że tak gdzieś było.
A 2, że zawsze tworzę funkcje przez int, ponieważ mimo że nie zwracają zawsze wartości to zawsze mi działają.
P-172161
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2018-08-18 12:57:47
Ale nawet w kursie jest tak:
C/C++
int main()
{
    if( odczytajPlik( "cpp0x.txt" ) )
         std::cout << "Plik zostal wczytany!" << std::endl;
   
    return 0;
}
P-172162
pekfos
» 2018-08-18 13:04:06
wczytywaniePliku
To nie jest wywołanie funkcji.
» Kurs C++ » Poziom 2Funkcje - pierwsze starcie lekcja
Tu znajdziesz, jak wygląda wywołanie funkcji.

A 2, że zawsze tworzę funkcje przez int, ponieważ mimo że nie zwracają zawsze wartości to zawsze mi działają.
"Nigdy nie rozglądam się przed przejściem przez ulicę i jakoś nigdy nie przejechał mnie samochód!" Niezwracanie wartości z funkcji ma niezdefiniowane zachowanie.
» Kurs C++ » Poziom 2Funkcje - pierwsze starcie lekcja
Tu znajdziesz, jak wygląda funkcja, która nic nie zwraca. Pisanie zawsze int, to celowe pisanie błędnego kodu.
P-172163
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2018-08-18 13:04:35
Chciałem jeszcze tylko dopowiedzieć, że zawsze tworzę funkcję przez int, ponieważ nie jestem też pewien, czy jeśli w argumentach jest referencja, to czy ma być int, czy void.
P-172164
pekfos
» 2018-08-18 13:05:29
zawsze tworzę funkcję przez int, ponieważ nie jestem też pewien, czy jeśli w argumentach jest referencja, to czy ma być int, czy void.
Skąd pomysł, że jest jakikolwiek związek między jednym i drugim?
P-172165
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2018-08-18 13:07:14
Bo wydawało mi się, że skoro jest referencja i zmienię wartość tej zmiennej w jakiejś funkcji, to tak jakby ta funkcja zwracała wartość.
P-172166
« 1 » 2
  Strona 1 z 2 Następna strona