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

在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'

  • 但是,当我运行它(而不构建它)时,一切都正常了。

    最佳答案

    您忘记编写TestClass::,如下所示:

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

    这是必需的,以便编译器可以知道setprintTestClass类的成员函数。并且一旦编写它,使它们成为成员函数,它们就可以访问该类的私有(private)成员。

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

    关于C++-类中的私有(private)变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5613143/

    10-11 00:22