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

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.

0

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

(Token_stream->full)

?

1

@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.

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.

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