Brak dostępu do zmiennej w klasie (member "..." (...) is inaccessible)

Odpowiedz Nowy wątek
2011-09-04 10:52
0

Witajcie. Mam za zadanie usunięcie wszystkich bugów z pewnego programu (calculator02buggy - http://www.stroustrup.com/Programming/calculator02buggy.cpp). Usunąłem wszystkie błędy które znalazłem:

(W sumie nie musicie tego czytać, jednak może błąd popełniłem gdzieś tu/nie usunąłem jakiegoś)

W term():

case '*':
    left *= primary();
    t = ts.get();

dodałem

'break;'

lass Token

na

class Token

W primary():

error("')' expected);

dodałem "

W Token_stream:

Token get()

na

Token Token_stream::get()

W expression():

double left = term(;

nadouble left = term();

w case '-':
```cpp
left += term()

naleft -= term()

--------------------------------------------------
W main() [w bloku try, oczywiście] dodałem:
```cpp
double val;

W Token get():

if (full) // do we already have a Token ready?
{
        full=false; // remove token from buffer
        return buffer;
} 

na

if (Token_stream.full)//do we already have a Token ready?
{
    Token_stream.full=false; // remove token from buffer
    return Token_stream.buffer;
}

dodałem do switch(ch):

case '8':

Po próbie kompilacji:

(60): error C2059: syntax error : '.'
(69): (...): syntax error : '.'
(70): (...): syntax error : missing ';' before '{'
(71): (...): syntax error : missing ';' before '.'
(71): (...): syntax error : missing ';' before '.'
(72): (...): token '.' is illegal after UDT 'Token_stream'
(72): (...):'Token_stream' : illegal use of this type as an expression
(72): (...): 'Token_stream' : illegal use of this type as an expression
(72): (...): left of '.buffer' must have class/struct/union

PS: Uczę się z książki "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne Stroustrup'a. W tym rozdziale dopiero było właśnie takie małe wprowadzenie do klas, więc nie wymagajcie ode mnie jakiejś ich szczególnej znajomości.


"Na imię mi Legion, bo nas jest wielu." - Mk 5, 9
edytowany 1x, ostatnio: kapi12c, 2011-09-04 10:53
Przed ostatnia poprawka jest niepotrzebna, a nawet błędna. - Zjarek 2011-09-04 11:42

Pozostało 580 znaków

2011-09-04 11:38
0

Prawdopodobnie się mylę, ale spróbuj tak:

(Token_stream->full)

?


edytowany 1x, ostatnio: Patryk27, 2011-09-04 11:38

Pozostało 580 znaków

2011-09-04 11:51
blee

@up tak mylisz się. W ten sposób w c++ odwołuje się do pola przez wskaźnik na obiekt.

czy chodzi o ten fragment?

Token get()
{
    if (full) {       // do we already have a Token ready?
        // remove token from buffer
        full=false;
        return buffer;
    } 
...

jeśli tak to zamień na:

Token Token_stream::get() //3
{
    if (full) {       // do we already have a Token ready?
        // remove token from buffer
        full=false;
        return buffer;
    }
...

czyli tak jak wyżej napisałeś dodaj tylko "Token_stream::". full i buffer to składowe.

Eh, rozwiązanie było takie proste, a ja się nie skapłem -.-. Dziękuję jednak za pomoc :). - kapi12c 2011-09-04 19:42

Pozostało 580 znaków

2011-09-04 11:53
blee
0
blee napisał(a)

@up tak mylisz się. W ten sposób w c++ odwołuje się do pola przez wskaźnik na obiekt.
Raczej tym operatorem bo w ten sposób w ogóle się nie odwołuje.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0