无法编译(未声明和预期的主要表达式)

时间:2015-10-01 15:00:35

标签: c++ mysql regex struct

所以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;
}

3 个答案:

答案 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;