C++ Can';是否将结构传递给另一个文件中声明的函数?

C++ Can';是否将结构传递给另一个文件中声明的函数?,c++,struct,repl.it,C++,Struct,Repl.it,我有一系列变量,包括在另一个文件(Vek.h)中声明的结构。在这个文件中,我还声明了一个名为correct的函数: class Vek: public Player{ protected : int counter = 0; struct next {int nexti=0; int nextj=0;}; next newNext = {0,0}; int jTemp; int iTemp = 0; int jPast; int

我有一系列变量,包括在另一个文件(Vek.h)中声明的结构。在这个文件中,我还声明了一个名为
correct
的函数:

class Vek: public Player{
   protected :
    int counter = 0; 
    struct next {int nexti=0; int nextj=0;};
    next newNext = {0,0};
    int jTemp; 
    int iTemp = 0;
    int jPast;
    int iPast;
    int hits;
    int pastHits = 0;
    int count = 0;
    void putShip(Cell[OCEAN_SIZE][OCEAN_SIZE]);
    int correct(int, int, int, int, int, int, struct);
    // int fire(vector<int>submit);
    Coords shot;
由于结构原因,调用
correct
时出错。其中我得到了一个错误:

“correct”的越界定义与任何 以“Vek”表示的声明

这是怎么回事?如何将结构
next
传递给
correct
函数

如果
correct
周围没有空格,我会得到错误:

匿名结构的声明必须是定义


结构的定义包括

  • 关键字
    struct
  • 通常是结构的(类型)名称
  • 结构体,用大括号表示
例如:

struct    Int_Struct    { int mI; };
  ^           ^              ^ 
keyword      name           body
此处的名称
Int\u Struct
,可以直接用作类型名称(与C不同)

该类型变量的定义遵循通常的约定
typename variablename

Int_Struct myVar与往常一样,函数参数的声明也是如此:

void f(Int_Struct myParam)

在原型中,或者如果没有使用参数,可以省略参数名,只需编写
void f(Int_Struct)。但通常会给出一个“会说话”的参数名,以便读者了解该参数是关于什么的;最好的文档是自我文档


不能将用作类型名,就像在函数定义中的最后一个参数
int-Vek::correct(int-iTemp、int-jTemp、int-iPast、int-jPast、int-hits、int-count、
struct-newNext
:记住,参数声明的形式为
typename-parametername
,这使得
struct
成为如上所述不可能的类型名。如果您希望以C方式冗余使用关键字struct作为参数或变量声明中类型名称的一部分:
struct Int\u struct varName
相当于更为惯用和常见的
Int_Struct varName > 

我建议将此表示为代码> int VK::正确(…)<代码>,在 >:< < />代码>中没有空格,以符合大多数C++编码约定。@ TADMAN好的谢谢。我现在得到一个新错误,请参见上面的编辑What is
struct next
,为什么变量没有名称?我希望看到
next x
Foo next
。什么是
struct
?它可能应该写成
struct Foo next
。必须指定结构名称。
struct
是一个关键字,您可能需要将
struct
对象重命名为其他名称。
struct    Int_Struct    { int mI; };
  ^           ^              ^ 
keyword      name           body