PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] forward declaration
楼主:
keya
(Lynch)
2014-05-02 23:15:07
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
Complie Error
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
strcut A incomplete type
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
using namespace std;
struct A;
void fun(A a){
a();
}
struct A{
void operator()(){cout << "A() called" << endl;}
};
int main(){
fun(A());
return 0;
}
补充说明(Supplement):
这是一题测验题目
如果将fun写到struct A后面即可compile正确
请问有什么方式在不更改code顺序
也不更改main以及struct A的前提下
只能更改fun本身以及之前的code
可以避免incomplete type?
谢谢!
作者:
carylorrk
(carylorrk)
2014-05-02 23:42:00
A&
作者:
azureblaze
(AzureBlaze)
2014-05-03 00:02:00
http://ideone.com/9CE1Gj
只能开两个档案要对A做任何操作一定要先看过他有哪些成员
作者: AstralBrain
2014-05-03 02:09:00
http://ideone.com/aQ56yY
把fun改成template
作者:
kwpn
(ITSST)
2014-05-03 07:11:00
除了template 你也可以fun的A改成传入A的abstract父类别的reference 并把此父类别定义式写在fun的上面.
作者:
ah7675
(阿毛)
2014-05-03 12:30:00
void fun(A *a) 这样不行吗?
作者:
uranusjr
(â†é€™äººæ˜¯è¶…級笨蛋)
2014-05-03 15:19:00
用指标的话要修改 main, 题目说不行
作者:
kwpn
(ITSST)
2014-05-03 17:01:00
依目前的定义式顺序, 不管是A&或是A*都不行, 因为fun()里有呼叫到operator().
作者: tomnelson
2014-05-03 18:18:00
看来看去,使用template好像是唯一解了!
楼主:
keya
(Lynch)
2014-05-04 10:20:00
用template真是我想都没想过得方法 不太清楚可行的原因谢谢各位参与讨论
作者:
kwpn
(ITSST)
2014-05-04 12:19:00
因为用template是编译到main里的fun(A())时才产生fun, 这时A的operator()已定义.
楼主:
keya
(Lynch)
2014-05-04 22:39:00
谢谢楼上大大的解惑
作者:
carylorrk
(carylorrk)
2014-05-09 03:50:00
搞错了XD
继续阅读
Re: [问题] MFC基础学习
dearsophia
[问题] 使用批次档中途错误
killer0418
Re: [问题] 关于字符和字串显示错误问题
RealJack
[讨论] 与基类极相同的类 怎写才精炼
Move192
[问题] 关于字符和字串显示错误问题(已解决)
bat205
[问题] 用 recursive 作闯迷宫的设定 求神支援
lalawolala
[问题] 全域变量的问题
watson1988
Re: [问题] Mac上include iostream就不需要time.h?
uranusjr
Re: [问题] 如何将名称隐藏起来
applecool
[问题] 撰写"开启档案"功能时缩图的问题
googled
Links
booklink
Contact Us: admin [ a t ] ucptt.com