在头文件外实现struct声明的成员方法出现报错的问题问询
报错原因
- 你给出的结构体定义末尾缺少分号,属于基础语法错误,编译阶段就会直接报错。
- 在结构体外部实现成员方法时,没有添加
Foo::作用域限定符,编译器会将你写的foo_bar识别为独立的全局函数,结构体声明的Foo::foo_bar成员方法会被判定为仅声明无实现,链接阶段会抛出未定义引用错误。 - 如果实现代码未引入
<iostream>头文件、也没有指定std命名空间,代码中的cout和endl会被识别为未定义标识符,触发编译报错。
正确实现代码
首先补全结构体的正确声明:
#include <iostream> struct Foo { int bar; void foo_bar(); };
成员方法的正确实现写法:
// 加Foo::前缀表明该方法属于Foo结构体 void Foo::foo_bar() { // 显式指定std命名空间,避免全局命名空间污染 std::cout << "Foobar" << std::endl; }
内容的提问来源于stack exchange,提问作者Jakub Klimek
相关产品推荐
相关产品推荐

