所以bellow遵循一个函数,然后将调用一个主程序。我的问题是,如果我没有将challInfo声明为结构,那么在编译时,它将返回:
页面上的错误PhotoPoints第5行,第21栏:'challInfo'未在此范围内声明
同时,如果我确实声明它(如下所示),则返回:
错误页面上的PhotoPoints第5行,第30栏:预期的' - '前面的主要表达式'令牌错误页面上的PhotoPoints,第52行:预期的' - '前面的主要表达式'令牌错误页面上的第8页PhotoPoints ,col 28:在'。'之前的预期主要表达式令牌ERROR页面上的PhotoPoints第8行,第60行:在'。'之前的预期主要表达式。在页面上的令牌错误第8行的第1列,第109行:在'之前的预期主要表达式' 。'令牌错误页面上的PhotoPoints第9行,第31栏:预期的' - '前面的主要表达式'令牌错误页面上的第9行第7页的第7页,第66行:第一行中的预期主要表达式'。'令牌错误页面上的第9页PhotoPoints ,col 118:在'。'之前的预期primary-expression在第14行的第4页的PhotoPoints,col 35:在'。'之前的预期primary-expression'第14行的第4行的PhotoPoints,第57行:在'之前的期望的primary-expression' ''令牌
我一直在寻找互联网,包括Stack Overflow,似乎每个案例的答案似乎都是特定的。我承认我迷路了。你能帮忙吗?
float PhotoPoints() {
struct challInfo;
bool isFacingOther();
bool sphereInDark();
bool isCameraOn = challInfo.camera.cameraOn;
bool isFacingOtherResult = isFacingOther();
bool isOppNotInDarkZone = !sphereInDark(challInfo.other.zrState);
bool myMirror = challInfo.me.mirrorTime != 0 && challInfo.me.mirrorTime + ITEM_MIRROR_DURATION > challInfo.currentTime;
bool otherMirror = challInfo.other.mirrorTime != 0 && challInfo.other.mirrorTime + ITEM_MIRROR_DURATION > challInfo.currentTime;
float picturePointValue = 0;
if (isCameraOn && isFacingOtherResult && isOppNotInDarkZone && !myMirror)
{
float bet[3], distance;
mathVecSubtract(bet, challInfo.me.zrState, challInfo.other.zrState, 3);
distance = mathVecMagnitude(bet, 3);
if (distance < PHOTO_MIN_DISTANCE) {
DEBUG(("Not a good shot: too close to the other satellite | "));
return 0.0;
}
picturePointValue = 2.0 + 0.1/(distance - PHOTO_MIN_DISTANCE + 0.1);
if(otherMirror){
picturePointValue = 0;
DEBUG(("Not a good shot: Opposing mirror active |"));
}
}
else if(!isCameraOn){
DEBUG(("Not a good shot: camera off |"));
}
else if(myMirror){
DEBUG(("Not a good shot: my mirror's in the way |"));
}
else if(!isFacingOtherResult) {
DEBUG(("Not a good shot: not facing the other satellite | "));
}
else if(!isOppNotInDarkZone){
DEBUG(("Not a good shot: opponent in dark zone |"));
}
return picturePointValue;
}
答案 0 :(得分:0)
每次引用challInfo
成员时,您都会遇到错误。您需要包含一个完整的声明,以便编译器可以告诉结构内部的内容,简单地说它是一个结构。您只提供了前瞻声明。
答案 1 :(得分:0)
struct challInfo;
应该有如下定义:
// Define your camera object
struct Camera {
bool isCameraOn;
}
// Define the object type of challInfo
struct PhotographyInfo {
Camera camera
}
然后你可以使用这个对象:
PhotographyInfo challInfo{};
challInfo.camera = Camera{true};
答案 2 :(得分:0)
您在将struct challInfo
分配给bool isCameraOn
的数据成员后定义struct
。这是我认为你对structs
有点困惑的问题。 struct
在很多方面类似于一个类。例如,我可以将这样的东西放在带有其他类定义的头文件中。
struct Example_struct{
int data_mem_a;
bool data_mem_b;
}
然后在struct
原型
class
class example_class{
private:
example_struct struct_instance;
public:
bool get_a_from_struct(){return struct_instance.data_mem_a;};
在您的情况下,您需要确保在某处定义challInfo
结构,然后声明它的实例。
challInfo CI;
bool isCameraOn = CI.camera.caneraOn;