C ++ - zmienne prywatne w klasach


Próbuję utworzyć klasę w oddzielnych plikach z prywatnymi zmiennymi.
Jak dotąd mój kod zajęć wygląda tak:
W TestClass.h d.
#ifndef TESTCLASS_H
#define TESTCLASS_H
#include <string>
using namespace std;class TestClass
{
private:
string hi;
public:
TestClass(string x);
void set(string x);
void print(int x);
};#endif

W roku TestClass.cpp
#include "TestClass.h"
#include <iostream>
#include <string>
using namespace std;TestClass::TestClass(string x)
{
cout << "constuct " << x << endl;
}void set(string x){
hi = x;
}void print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}

Kiedy próbuję zbudować w Code :: Blocks, mówi:
  • ... \ TestClass.cpp: w funkcji 'void set (std :: string)':
  • ... \ TestClass.cpp: 12: błąd: 'hi' nie został zadeklarowany w tym zakresie
  • ... \ TestClass.cpp: w funkcji 'void print (int)':
  • ... \ TestClass.cpp: 17: błąd: „hi” nie został zadeklarowany w tym zakresie
  • ... \ TestClass.cpp: 19: błąd: 'hi' nie został zadeklarowany w tym zakresie
  • ... \ TestClass.cpp: 21: błąd: 'hi' nie został zadeklarowany w tym zakresie
  • ... \ TestClass.cpp: 23: błąd: „hi” nie został zadeklarowany w tym zakresie

Ale kiedy go uruchamiam (i nie buduję), wszystko działa.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zapomniałeś napisać
TestClass ::
jak poniżej:
void TestClass::set(string x)
//^^^^^^^^^^^thisvoid TestClass::print(int x)
//^^^^^^^^^^^this

Jest to konieczne, aby kompilator wiedział, że
set
i
print
są funkcjami składowymi klasy
TestClass
. A kiedy już to napiszesz, tworząc z nich funkcje członkowskie, będą mogli uzyskać dostęp do prywatnych członków klasy.
Również bez

TestClass::
,
set
i
print
staną się funkcjami bezpłatnymi.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zdobyć przewagę
void TestClass::set(string x){

i
void TestClass::print(int x){
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W swoim pliku
.cpp
musisz uczynić funkcje składowe set i print jawnie częścią klasy, na przykład:
void TestClass::set(string x){
hi = x;
}void TestClass::print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie zezwalasz na zakres funkcji
print
i
set
z nazwą klasy.
void TestClass::set(string x){
hi = x;
}void TestClass::print(int x){
if(x == 2)
cout << hi << " x = two\n";
else if(x < -10)
cout << hi << " x < -10\n";
else if(x >= 10)
cout << hi << " x >= 10\n";
else
cout << hi << " x = " << x << endl;
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

powiedzieć
void TestClass::set(string x){

zamiast
void set(string x){

to samo dla print ().
Zadeklarowałeś je jako funkcje globalne zamiast funkcji składowych TestClass.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Twoje metody nie są zdefiniowane jako metody klasowe. Spróbuj użyć TestClass :: set i TestClass :: print.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

-void set(string x) {
+void TestClass:set(string x) {

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się