在成员函数中调用成员结构
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 概念的新手,我无法让它发挥作用。
标题/源代码部分有什么问题吗?如果没有,我该如何调用这个函数?有什么帮助吗?
[编辑] 问题已解决:
事实证明,问题完全是另一回事。我用 两个项目(一个是库,另一个是用于测试 图书馆。我们分别称它们为 testLib 和 tester) 有依赖关系。当我在 testlib 项目中进行更改时,我 必须按顺序从 tester 的 main.cpp 转到相关的 testLib 位置 让我的 IDE 看到更改并进行相关更新。自从我是 在两个单独的文本编辑器窗口中工作并且没有做我做过的事情 如上所述,我的 IDE 没有看到
Test
类的新成员和 当我输入Test:: testRes
-- 时没有建议我。这让我 认为我无法访问新成员结构。谢谢大家 寻求帮助。
【问题讨论】:
请出示main
的代码。它应该像Test::testResults
一样简单。
“我无法从我的 main 访问成员结构”是什么意思;错误是什么?显示更多代码。
告诉我们main()
,你也不需要struct testResults &testRes
,你只需要testResults &testRes
【参考方案1】:
struct testResults
不是类的成员,它只是一个类型声明。您不会像访问类中的实际数据一样访问它。我认为这就是你所说的,所以这可能是混乱。
相反,您创建一个实例如下:
Test::testResults myresults;
现在您可以将myresults
传递给您的Test 类的实例'performTest
method。
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 &testRes)
,但是,您应该定义int Test::performTest(QString arg1, QString arg2, Test::testResults &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)
你看出区别了吗?
【讨论】:
对不起,我试图减少我的原始代码,显然我忘了更改标题部分。现在我刚刚编辑了你在我的问题中提到的部分,谢谢。以上是关于在成员函数中调用成员结构的主要内容,如果未能解决你的问题,请参考以下文章