Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ - Private variables in classes

Tags:

c++

private

class

I am trying to create a class in seperate files with private variables. So far my classes code is:

In TestClass.h

#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

In 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;
}

When I try to build in Code::Blocks it says:

  • ...\TestClass.cpp: In function 'void set(std::string)':
  • ...\TestClass.cpp:12: error: 'hi' was not declared in this scope
  • ...\TestClass.cpp: In function 'void print(int)':
  • ...\TestClass.cpp:17: error: 'hi' was not declared in this scope
  • ...\TestClass.cpp:19: error: 'hi' was not declared in this scope
  • ...\TestClass.cpp:21: error: 'hi' was not declared in this scope
  • ...\TestClass.cpp:23: error: 'hi' was not declared in this scope

But when I run it (and don't build it) everything is working.

like image 805
Mr. Giggums Avatar asked Apr 10 '11 16:04

Mr. Giggums


2 Answers

You forgot to write TestClass:: as shown below:

void TestClass::set(string x)
   //^^^^^^^^^^^this

void TestClass::print(int x)
   //^^^^^^^^^^^this

That is necessary so that compiler can know that set and print are member functions of class TestClass. And once you write it, making them member functions, they can acess the private members of the class.

Also, without TestClass::, set and print function would become free functions.

like image 70
Nawaz Avatar answered Oct 31 '22 23:10

Nawaz


Use

void TestClass::set(string x){

and

void TestClass::print(int x){
like image 42
EboMike Avatar answered Oct 31 '22 22:10

EboMike