gpt4 book ai didi

c++ - 错误: “Left of getValue must have class/struct/union”

转载 作者:行者123 更新时间:2023-12-02 10:36:30 25 4
gpt4 key购买 nike

除了标题中的错误外,它还表示A2A1是未声明的标识符,并且Result::calResult:function不需要2个参数,但是它在实现中使用。最后,它说getValue的左边必须有class / struct / union。

我是C++的新手,正在尝试创建一个比较两个数组的3个元素的程序,我知道这不是实现此目的的最佳方法,但我正设法使我着迷于对象和类。

Main.cpp:

#include "stdafx.h"
#include <iostream>
#include "ArrayOfThree.h"

using namespace std;

int main()
{
ArrayOfThree A1, A2;
Result R;
int i = 0;
int input;
for (int i=0;i<2;i++)
{
cin >> input;
A1.set(i, input);

}
for (int i = 0; i < 2; i++)
{
cin >> input;
A2.set(i, input);
}
R.CalResult(A1, A2);
R.outResult();

return 0;
}

ArrayOfThree.h
#include "stdafx.h"
#include <iostream>
#include "Result.h"
using namespace std;

class ArrayOfThree {
private:
int a1, a2, a3;
public:
ArrayOfThree() {
a1 = 0; a2 = 0; a3 = 0;
}

void set(int index,int input) {
if (index == 0)
a1 = input;
else if (index == 1)
a2 = input;
else if (index == 2)
a3 = input;
else
cout << "Index out of bound" << endl;
}
int getValue(int index) {
if (index == 0)
return a1;
else if (index == 1)
return a2;
else if (index == 2)
return a3;
else
cout << "Index out of bound" << endl;
return 0;
}
};

Result.h
#include "stdafx.h"
#include <iostream>

using namespace std;

class Result {

private:
int r1=0, r2=0;
char R;

public:
Result() { r1 = 0; r2 = 0; R = ' '; }

void CalResult(ArrayOfThree A1, ArrayOfThree A2)
{
for (int i = 0; i < 2; i++)
{
if (A1.getValue(i) < A2.getValue(i))
r2++;
else if (A1.getValue(i) > A2.getValue(i))
r1++;
else
r1 = r1;
}
if (r1 < r2)
R = 'B';
else if (r1 > r2)
R = 'A';
else
R = 'T';
}

void outResult()
{
if (R == 'B' || R == 'A')
cout << "The winner is :" << R;
else
cout << "Its a Tie" << endl;
}
};

最佳答案

查看您的代码,您的#includes有点混乱。

ArrayOfThree.h header 中,即使没有在Result.h header 中使用Result.h中的任何代码,也要包含ArrayOfThree.h

另一方面,Result.h header 使用的是ArrayOfThree header 中定义的ArrayOfThree.h类,但Result.h不包含此 header 。

您必须包括所使用的所有类,函数等的头文件。
因此,要解决您的问题,请将#include "ArrayOfThree.h"添加到Result.h header 中,然后从#include "Result.h" header 中删除ArrayOfThree.h

构造代码的更好方法是拆分类的声明和定义。这意味着您将为ArrayOfThreeResult类拥有一个TU(翻译单元)。

例如,您的Result.h文件将变为:

#include "stdafx.h"
#include "ArrayOfThree.h"

class Result {
private:
int r1=0, r2=0;
char R;

public:
Result();

void CalResult(ArrayOfThree A1, ArrayOfThree A2);

void outResult();
};

并且您的项目 Result.cpp中将有一个新的TU,如下所示:
#include "Result.h" // In the implementation file, you need to include the
// declaration of the class that you're implementing here.
#include <iostream>

using namespace std;

Result::Result() { r1 = 0; r2 = 0; R = ' '; }

void Result::CalResult(ArrayOfThree A1, ArrayOfThree A2)
{
for (int i = 0; i < 2; i++)
{
if (A1.getValue(i) < A2.getValue(i))
r2++;
else if (A1.getValue(i) > A2.getValue(i))
r1++;
else
r1 = r1;
}
if (r1 < r2)
R = 'B';
else if (r1 > r2)
R = 'A';
else
R = 'T';
}

void Result::outResult()
{
if (R == 'B' || R == 'A')
cout << "The winner is :" << R;
else
cout << "Its a Tie" << endl;
}

请注意,现在,您的 Result.h header 不是 #include <iostream>。这是因为 Result.h header 不依赖 iostream的任何内容,因为依赖 iostream的部分已移至实现文件 Result.cpp,其中包括 iostream header 。

关于c++ - 错误: “Left of getValue must have class/struct/union”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60062798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com