-1

我正在尝试使用 MinGW 4.7.2 编译一个简单的 C++ 程序,但对大量错误和警告感到沮丧。

/*\ program.h \*/
typedef struct
{   int member0;
    int member1;
    int member2;
    int member3;
} structure;

void function(&structure);

/*\ program.cpp \*/
#include "program.h"

int main(void)
{   structure *instance;
    function(instance);
}

void function(&structure)
{   // nothing
}

function接受 a 的地址structure。指针instance包含 a 的地址,structure然后将其传递给function

很简单,但编译器不高兴。

g++ program.cpp
In file included from program.cpp:1:0:
program.h:8:14: error: variable or field 'function' declared void
program.h:8:25: error: expected primary-expression before ')' token
program.cpp: In function 'int main()':
program.cpp:5:19: error: 'function' was not declared in this scope
program.cpp: At global scope:
program.cpp:8:14: error: variable or field 'function' declared void
program.cpp:8:25: error: expected primary-expression before ')' token

variable or field 'function' declared void想告诉我什么?function很明显void,但那有什么不好呢?我花了几个小时寻找这些答案,但没有成功。

如何在不使编译器呕吐的情况下将指针传递给结构?

4

3 回答 3

5

而不是这个(见我在代码中的评论......编译器告诉你的几乎是什么):

/*\ program.h \*/
typedef struct
{   int member0;
    int member1;
    int member2;
    int member3;
} structure;

void function(&structure);

/*\ program.cpp \*/
#include "program.h"

int main(void)
{   structure *instance; // this is not an instance. it is a pointer

    function(instance);
}

void function(&structure) // this is an invalid declaration
{   // nothing
}

做这个:

/*\ program.h \*/
struct structure
{   int member0;
    int member1;
    int member2;
    int member3;
};

void function(structure& s); // parameter 's' is a reference to your structure

/*\ program.cpp \*/
#include "program.h"

int main(void)
{   structure instance; // this is an instance

    function(instance);
}

void function(structure& s) 
{   // nothing
}

您需要了解实例、指针和引用之间的差异......并且无论您是声明变量还是函数接口,还需要了解每种方法的有效语法。

或者,您可以将指针传递给您的实例,如下所示:

/*\ program.h \*/
struct structure
{   int member0;
    int member1;
    int member2;
    int member3;
};

void function(structure* p);

/*\ program.cpp \*/
#include "program.h"

int main(void)
{   structure instance; // you still need an instance to point to

    function(&instance); // this passes the address of the instance into the function
}

void function(structure* p)
{   // nothing
}

是否使用引用或指针取决于您要执行的操作。您还应该考虑使用 const 来更清楚地说明您的函数是否会修改结构的内容,并帮助编译器优化您的代码。

最后,从第一个错误开始,一次修复一个错误。通常,一旦第一个错误得到修复,第二个和随后的错误就会改变(或消失)。

于 2013-05-22T06:59:53.420 回答
1
/*\ program.cpp \*/
#include "program.h"
void function(structure*);

int main(void)
{   structure instance;
    function(&instance);
}

void function(structure*)
{   // nothing
}
于 2013-05-22T06:51:40.463 回答
1

您不想/不需要使用 typedefs 在 C++ 中声明结构,并且您的函数应该接受指向它们的指针 - 表示Structure*...

/*\ program.h \*/
struct Structure
{   int member0;
    int member1;
    int member2;
    int member3;
};

void function(Structure*);

你的程序只是做同样的小改动来传递/期望一个指针。(main(void)是 C 的东西 -main()对 C++ 来说就足够了)

/*\ program.cpp \*/
#include "program.h"

int main()
{
    Structure* instance;
    function(instance);
}

void function(Structure*)
{   // nothing
}
于 2013-05-22T06:52:13.003 回答