C++ 无法编译(未声明&应为主表达式)

C++ 无法编译(未声明&应为主表达式),c++,mysql,regex,struct,C++,Mysql,Regex,Struct,因此,bellow遵循一个函数,然后将为主程序调用该函数。我的问题是,如果我不将challInfo声明为struct,编译时,它将返回: 第5行第21列第PhotoPoints页出错:“challInfo”未在此范围内声明 同时,如果我按照下面的方式声明它,它将返回: 第5行第30列页面光点错误:在“.”之前应为主要表达式。第7行页面光点标记错误,第52列:在“.”之前应为主要表达式。第8行页面光点标记错误,第28列:在“.”之前应为主要表达式。第8行页面光点标记错误,第60列:在“.”之前应为

因此,bellow遵循一个函数,然后将为主程序调用该函数。我的问题是,如果我不将challInfo声明为struct,编译时,它将返回:

第5行第21列第PhotoPoints页出错:“challInfo”未在此范围内声明

同时,如果我按照下面的方式声明它,它将返回:

第5行第30列页面光点错误:在“.”之前应为主要表达式。第7行页面光点标记错误,第52列:在“.”之前应为主要表达式。第8行页面光点标记错误,第28列:在“.”之前应为主要表达式。第8行页面光点标记错误,第60列:在“.”之前应为主要表达式。第8行的页面光点上的标记错误,第109列:在“.”之前应为主要表达式。第9行的页面光点上的标记错误,第31列:在“.”之前应为主要表达式。第9行的页面光点上的标记错误,第66列:应在“.”之前使用主表达式。第9行的页面光点上的标记错误,第118列:应在“.”之前使用主表达式。第14行的页面光点上的标记错误,第35列:应在“.”之前使用主表达式。第14行的页面光点上的标记错误,第57列:应在“.”之前使用主表达式。标记

我一直在互联网上寻找,包括堆栈溢出,似乎每个案例的答案都是特定的。我承认我迷路了。你能帮忙吗

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

每次引用challInfo的成员时,此处都有一个错误。您需要包含一个完整的声明,这样编译器就可以知道结构内部是什么,只需知道它是一个结构。您只提供了一份远期声明

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};
定义一个结构challInfo,然后将bool isCameraOn分配给该结构的数据成员。这里是一个问题,我认为您对结构有点困惑。结构在许多方面与类相似。例如,我可以将这样的内容与其他类定义一起放在头文件中

struct Example_struct{
      int data_mem_a;
      bool data_mem_b;
}
然后可能在类原型中使用此结构

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;

结构challInfo似乎缺少类型名。或者,如果challInfo是一个结构类型,它同时缺少一个变量名和结构的定义。恐怕我不明白,你会怎么更正它?其他人不可能猜到如何更正它,但是我怀疑这个函数应该有一个名为challInfo的参数,不管它应该是什么类型。你接受答案了吗@NUNOVIEGASPLE删除“mysql”标签;这似乎是无关的。