This topic has been archived. It cannot be replied.
-
工作学习 / IT技术讨论 / C++问题请教在C下有这样一段程序:
BOOL (*a)( );
BOOL b( );
BOOL c( );
void d( )
{
a=b;
a(1,0.9);
a=c;
a(0.9);
}
BOOL b(int i, float j)
{
....
return ture;
}
BOOL c(float j)
{
....
return ture;
}
现在我把这段程序所在的文件扩展名该为CPP,VC6.0 编译通不过。“overloaded function as left operand”和“a function does not take 1 parameters”和“a function does not take 2 parameters”
各位DX有和高见啊?我跪求+裸求
-wengq(Gary);
2004-3-22
{449}
(#1655366@0)
-
此程序是用老式的C写的,连ANSI C规范也不符合,不用说C++了。C++中函数指针变量只能有一个prototype定义。
-xhis(枫下恩仇#13 xhis);
2004-3-23
(#1655387@0)
-
唉,这就是porting,不想动原程序的结构。DX有什么好的解决办法吗?
-wengq(Gary);
2004-3-23
(#1655389@0)
-
啊嚏!~~~~
-wengq(Gary);
2004-3-23
(#1655486@0)
-
bless you, can you tell me why use c++ compiler to compile c program?
-eagle_no1(瞎起哄);
2004-3-23
(#1656273@0)
-
因为整个软件要挪到VC++6.0上,界面全部重做,后台driver仍然用C,改成DLL,但与截面密切相关的code要重写,我负责重写,整天看code看的头大。
-wengq(Gary);
2004-3-24
(#1656727@0)
-
1) use c compiler to compile c code to generate *.o (*.a) files
2)write some c++ wrapper function(with c style) to call above interface(api , )3) use c++ compiler to compiler to compile c++ code
4) use c++ linker to link the whole *.o to the executable image
this was the idea when our company did the some thing.
-eagle_no1(瞎起哄);
2004-3-24
{174}
(#1656735@0)
-
Good idea。明天先组织开会讨论。其实跟我想的差不多,但决定权不在我啊。
-wengq(Gary);
2004-3-24
(#1656741@0)
-
建议:1)将函数prototype写全;2)为不同的函数分别定义不同的函数指针变量。
-xhis(枫下恩仇#13 xhis);
2004-3-23
(#1655496@0)
-
Remove a=b; a=c; Just call b and c directly...
-dundas888(登达寺);
2004-3-23
(#1655495@0)
-
直接把所有的b改成c不久完了么。
-canadiantire(Crappy Tire);
2004-3-23
(#1655536@0)
-
OK, here is one, try it...typedef BOOL (*a)(...);
// BOOL (*a)(...);
BOOL b(int,float);
BOOL c(float);
void d( )
{
a aa;
aa=(a)b;
aa(1,0.9);
aa=(a)c;
aa(0.9);
}
BOOL b(int i, float j)
{
....
return true;
}
BOOL c(float j)
{
....
return true;
}
-canadiantire(Crappy Tire);
2004-3-23
{244}
(#1655552@0)
-
我大脑进水,找了半天才找到“Reply”。谢谢DX!再问一句,那typedef BOOL (*a)(...); 里的“....”指的是什么?
-wengq(Gary);
2004-3-23
(#1655804@0)
-
any number of parameters.
-canadiantire(Crappy Tire);
2004-3-23
(#1655838@0)
-
仔细看的时候发现你写了4个点,应该是3个点。这是C/C++的语法规则允许的一种参数说明的方式。表示这个函数接收任意个参数。
-canadiantire(Crappy Tire);
2004-3-23
(#1656259@0)
-
真是真功夫啊!感谢!象我这种虽说在挨踢也混了个把年头的人,遇到这种问题,就找不到北了,馅儿是全露出来了。
-wengq(Gary);
2004-3-24
(#1656725@0)