C++ Can';是否将结构传递给另一个文件中声明的函数?
我有一系列变量,包括在另一个文件(Vek.h)中声明的结构。在这个文件中,我还声明了一个名为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
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 isstruct next
,为什么变量没有名称?我希望看到next x
或Foo next
。什么是struct
?它可能应该写成struct Foo next
。必须指定结构名称。struct
是一个关键字,您可能需要将struct
对象重命名为其他名称。
struct Int_Struct { int mI; };
^ ^ ^
keyword name body