在成员函数内调用成员结构

时间:2016-04-21 15:36:38

标签: c++ qt class oop struct

我们说我有一个名为Test的班级。在其中,我已经声明了一个名为testResults的结构。然后我编写了一个名为performTest()的成员函数。我希望这个函数改变struct变量的值(它还需要其他输入)。这就是我所做的:

(注意:我减少了代码,使您检查时不那么麻烦)

标题中的

class Test : public BaseHardwareTest
{
    Q_OBJECT
public:
    explicit Test(QObject *parent = 0);
    struct testResults {
        int testOneRes[15];
        int testTwoRes[5];
    };

    int performTest(int arg1, int arg2, struct testResults &testRes);

signals:

public slots:

};

来源:

int Test::performTest(int arg1, int arg2, Test::testResults &testRes)
{
    for (int i = 0; i < 15; i++) {
        if(arg1 < 12)
            testRes.testOneRes[i] = -1;
        else
            testRes.testOneRes[i] = 1;  
    } 

    for (int i = 0; i < 5; i++) {
        if(arg2 < 33)
            testRes.testTwoRes[i] = -1;
        else
            testRes.testTwoRes[i] = 1; 
    }

    return 1;
}

这是我的各种尝试之一。这个没有任何错误,但我不能使用它。 我无法从主 访问成员结构。我是OOP概念的新手,我无法使其发挥作用。

标题/来源部分有什么问题吗?如果没有,我该如何调用此功能?有什么帮助吗?

  

[编辑]问题已解决:

     

事实证明,这个问题完全是另一回事。我用   两个项目(一个是图书馆,另一个是用于测试   图书馆。我们分别称他们为 testLib 测试人员   哪个有依赖性。当我在 testlib 项目中更改内容时,我   必须按顺序从测试人员 main.cpp 转到相关的 testLib 位置   让我的IDE看到更改并进行相关更新。从那以后   在两个单独的文本编辑器窗口中工作,并没有做我所做的事情   上面说过,我的IDE没有看到Test类的新成员   当我输入Test:: testRes时,我没有建议我 - 。这让我受益匪浅   认为我无法访问新的成员结构。谢谢大家   寻求帮助。

3 个答案:

答案 0 :(得分:1)

struct testResults不是该类的成员,它只是一个类型声明。您不会像访问类中的实际数据一样访问它。我认为这就是你所说的,所以这可能是混乱。

相反,您可以按如下方式创建实例:

Test::testResults myresults;

现在,您可以将myresults传递给Test类的performTest方法实例。

Test mytest;
Test::testResults myresults;

// Assumes "QString" (whatever it is) has a constructor that takes a string:
mytest.performTest("Hello", "Goodbye", myresults);

答案 1 :(得分:1)

您似乎正在定义错误的功能。您定义int Test::performTest(int arg1, int arg2, DDRTest::testResults &testRes),但应该定义int Test::performTest(QString arg1, QString arg2, Test::testResults &testRes)

答案 2 :(得分:1)

您的h文件和cpp文件不匹配:

你在h文件中的

int performTest(QString arg1, QString arg2, struct testResults &testRes);

应该是

int performTest(int arg1, int arg2, testResults &testRes)

并在你的cpp文件中:

int Test::performTest(int arg1, int arg2, DDRTest::testResults &testRes)

应该是

int Test::performTest(int arg1, int arg2, Test::testResults &testRes)

你看到了区别吗?