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

Posted

技术标签:

【中文标题】在成员函数中调用成员结构【英文标题】:Calling a member struct inside a member function 【发布时间】:2016-04-21 15:36:38 【问题描述】:

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

(注意:我已经减少了代码以减少您检查的麻烦)

在标题中:

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;

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

标题/源代码部分有什么问题吗?如果没有,我该如何调用这个函数?有什么帮助吗?

[编辑] 问题已解决:

事实证明,问题完全是另一回事。我用 两个项目(一个是库,另一个是用于测试 图书馆。我们分别称它们为 testLibtester) 有依赖关系。当我在 testlib 项目中进行更改时,我 必须按顺序从 testerma​​in.cpp 转到相关的 testLib 位置 让我的 IDE 看到更改并进行相关更新。自从我是 在两个单独的文本编辑器窗口中工作并且没有做我做过的事情 如上所述,我的 IDE 没有看到 Test 类的新成员和 当我输入Test:: testRes-- 时没有建议我。这让我 认为我无法访问新成员结构。谢谢大家 寻求帮助。

【问题讨论】:

请出示main的代码。它应该像Test::testResults 一样简单。 “我无法从我的 main 访问成员结构”是什么意思;错误是什么?显示更多代码。 告诉我们main(),你也不需要struct testResults &amp;testRes,你只需要testResults &amp;testRes 【参考方案1】:

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

相反,您创建一个实例如下:

Test::testResults myresults;

现在您可以将myresults 传递给您的Test 类的实例'performTestmethod。

Test mytest;
Test::testResults myresults;

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

【讨论】:

谢谢你,鲍勃。事实证明这是一个典型的新手错误。 (我很确定昨天,我的 IDE 没有在 Test 类下显示 testResults。我不知道为什么)【参考方案2】:

您似乎定义了错误的函数。您定义了int Test::performTest(int arg1, int arg2, DDRTest::testResults &amp;testRes),但是,您应该定义int Test::performTest(QString arg1, QString arg2, Test::testResults &amp;testRes)

【讨论】:

对不起,我试图减少我的原始代码,但似乎我无法正确地做到这一点。感谢您的警告。【参考方案3】:

您的 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)

你看出区别了吗?

【讨论】:

对不起,我试图减少我的原始代码,显然我忘了更改标题部分。现在我刚刚编辑了你在我的问题中提到的部分,谢谢。

以上是关于在成员函数中调用成员结构的主要内容,如果未能解决你的问题,请参考以下文章

以结构体为参数的函数如何改变传入结构体成员的值

调用成员函数指针

c语言如何对结构体某一成员初始化

this指针 (保存调用成员函数对象的地址)

在成员构造函数之后调用基类构造函数

可以在不调用 memset 的情况下从构造函数初始化器列表中将成员结构设为零吗?