这是我的代码:
mainheader.h
void displaygrid(int (* _grid)[10][10] , string msg );
something.cpp
#include <string>
#include "mainheader.h"
void displaygrid(int (* _grid)[10][10], string msg = "" )
{
//body goes here
}
编译器在标题中的前向声明中说:
_grid和string是未声明的标识符
然而,由于它只是原型,它不应该担心_grid
的存在,对吗?
此外,字符串包含在字符串之后,但它也不知道字符串。看起来它试图调用函数而不是向前声明。怎么了?
答案 0 :(得分:4)
对于string
,您必须使用std::string
。
答案 1 :(得分:1)
它需要知道标题中的__grid以及字符串 - 转发声明与否。你需要至少在它上面的某个地方放置一个struct __grid;
或类似的东西,以便它有一些关于它是什么的线索。对于字符串相同...
答案 2 :(得分:1)
您需要#include <string>
中的mainheader.h
并将string
称为std::string
。您还需要包含获取_grid
所需的一切:
//mainheader.h
#include <string>
void displaygrid(int (* _grid)[10][10] , std::string msg );
相关帖子here。
答案 3 :(得分:0)
您还需要头文件中的默认参数,而不是实现中的默认参数,因为您希望将调用它的代码知道 msg
可以默认。