C ++ - 类中的私有变量

时间:2011-04-10 16:34:58

标签: c++ class private

我正在尝试使用私有变量在单独的文件中创建一个类。 到目前为止,我的类代码是:

在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

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

当我尝试构建Code :: Blocks时,它说:

  • ... \ TestClass.cpp:在函数'void set(std :: string)'中:
  • ... \ TestClass.cpp:12:错误:'hi'未在此范围内声明
  • ... \ TestClass.cpp:在函数'void print(int)'中:
  • ... \ TestClass.cpp:17:错误:'hi'未在此范围内声明
  • ... \ TestClass.cpp:19:错误:'hi'未在此范围内声明
  • ... \ TestClass.cpp:21:错误:'hi'未在此范围内声明
  • ... \ TestClass.cpp:23:错误:'hi'未在此范围内声明

但是当我运行它(并且不构建它)时,一切正常。

7 个答案:

答案 0 :(得分:18)

您忘了写TestClass::,如下所示:

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

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

这是必要的,以便编译器可以知道setprint是类TestClass的成员函数。一旦你编写它,使它们成为成员函数,它们就可以访问该类的私人成员。

此外,如果没有 TestClass :: setprint函数将成为自由函数。

答案 1 :(得分:4)

使用

void TestClass::set(string x){

void TestClass::print(int x){

答案 2 :(得分:3)

.cpp文件中,您需要将set和print成员函数明确地作为类的一部分,例如:

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

答案 3 :(得分:2)

您没有范围使用类名解析printset函数。

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

答案 4 :(得分:1)

void TestClass::set(string x){

而不是

void set(string x){

同样适用于print()。 您将它们声明为全局函数,而不是TestClass的成员函数。

答案 5 :(得分:0)

您的方法未定义为类的方法。尝试使用TestClass :: set和TestClass :: print。

答案 6 :(得分:-1)

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