当我尝试编译以下代码时,我收到以下错误。
Error: main.cpp: In function "int main()":
main.cpp:6: error: "display" was not declared in this scope
test1.h
#include<iostream.h>
class Test
{
public:
friend int display();
};
test1.cpp:
#include<iostream.h>
int display()
{
cout<<"Hello:In test.cc"<< endl;
return 0;
}
的main.cpp
#include<iostream.h>
#include<test1.h>
int main()
{
display();
return 0;
}
奇怪的是我能够成功编译unix。 我正在使用gcc和g ++编译器
答案 0 :(得分:3)
在将其声明为朋友之前,您需要提供该功能的声明 作为朋友的声明不符合标准的实际功能声明。
C ++ 11标准§7.3.1.2[namespace.memdef]:
第3段:
[...]如果非本地类中的
friend
声明首先声明一个类或函数,那么友元类或函数是最内层封闭命名空间的成员。 在该命名空间范围内提供匹配声明(在授予友谊的类定义之前或之后),通过非限定查找或限定查找找不到朋友的姓名。 [...]
#include<iostream.h>
class Test
{
public:
friend int display(); <------------- Only a friend declaration not actual declaration
};
你需要:
#include<iostream.h>
int display(); <------- Actual declaration
class Test
{
public:
friend int display(); <------- Friend declaration
};
答案 1 :(得分:2)
有趣。看起来friend
中display()
的{{1}}声明似乎是g ++中的实际函数声明。
我不认为标准实际上强制执行此操作,因此您可能希望在test1.h
中为display()
添加适当的声明:
test1.h