悬赏,求教BCB中加::问题

嘻嘻哈哈穷开心 2012-10-12 03:02:23
我是BCB菜鸟,最近刚开始学习,有一问题请教高手们
为什么有些函数会提示错误"Call of nonfunction",加入不加::则会运行成功.
多谢
如有满意答案,会加分
...全文
152 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
void __fastcall TForm1::CopyFileClick(TObject *Sender)

跟这个CopyFile控件是不是有关?
[/Quote]
就是这个问题,已经修改过来了
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
楼上所言极是。

楼主将这个控件(看起来象个按钮?)的名字命名为CopyFile,正好和Windows API提供的CopyFile同名。因此引起的冲突。所以我是建议给组件命名时使用前缀,如btnCopyFile,这样容易标识,并且一般不会重名。
[/Quote]
多谢多谢,就是这个问题,竟然没有注意,现在已经OK了
多谢妖哥
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
Unit2.h文件中有什么内容?
[/Quote]
就是一个新的Form
ccrun.com 2012-10-16
  • 打赏
  • 举报
回复
Unit2.h文件中有什么内容?
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
看不出什么问题,你的代码多吗?如果不涉及隐私,贴出来看看。
[/Quote]
不多,自己写着玩儿的,只是好奇为什么一直有问题
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "iostream.h"
#include <fstream>
#include "Unit1.h"
#include "Unit2.h"
#include <time.h>
#include <stdio.h>
#include "IniFiles.hpp"
#include <windows.h>
#include<Registry.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
using namespace std;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CopyFileClick(TObject *Sender)
{
AnsiString asFlieName = ExtractFilePath(Application->ExeName)+ "bcmvars.nvm";
if ( !FileExists( asFlieName ) )
{
//ShowMessage("error");
MessageBox(NULL,"NO CONFIG FILE EXIST!!!","ERROR",MB_ICONERROR);
}

::CopyFile(asFlieName.c_str(),"C:\\WINDOWS\\system32\\drivers\\bcmvars.nvm",false);
Close();
}
其他控件的代码,跟这个无关,就这样的?为什么非要加::
ccrun.com 2012-10-16
  • 打赏
  • 举报
回复
楼上所言极是。

楼主将这个控件(看起来象个按钮?)的名字命名为CopyFile,正好和Windows API提供的CopyFile同名。因此引起的冲突。所以我是建议给组件命名时使用前缀,如btnCopyFile,这样容易标识,并且一般不会重名。
  • 打赏
  • 举报
回复
把CopyFile控件更名为copyFile看看。
  • 打赏
  • 举报
回复
void __fastcall TForm1::CopyFileClick(TObject *Sender)

跟这个CopyFile控件是不是有关?
ccrun.com 2012-10-15
  • 打赏
  • 举报
回复
看不出什么问题,你的代码多吗?如果不涉及隐私,贴出来看看。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
引用 7 楼 的回复:
只有一个using namespa,其他没有啦


using的什么namespace?那个名字空间中是否也有CopyFile的函数?
[/Quote]
using namespace std;
ccrun.com 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
只有一个using namespa,其他没有啦
[/Quote]

using的什么namespace?那个名字空间中是否也有CopyFile的函数?
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 5 楼 的回复:
CopyFile ,你在哪个代码里用,工程怎么建立的,这个是API,不会这么复杂啊

就是在BCB里使用的,包含过winbase.h之后,必须加::才能编译成功.为什么?
[/Quote]
还需要头文件,还有其他操作,才能用windows API函数么?
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
CopyFile ,你在哪个代码里用,工程怎么建立的,这个是API,不会这么复杂啊
[/Quote]
就是在BCB里使用的,包含过winbase.h之后,必须加::才能编译成功.为什么?
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 4 楼 的回复:
嗯,是CopyFile 提示的是call of nonfunction


CopyFile是Windows API,在这个函数前面加::是可以的。你的工程中用到了什么名字空间?
[/Quote]
只有一个using namespa,其他没有啦
ccrun.com 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
嗯,是CopyFile 提示的是call of nonfunction
[/Quote]

CopyFile是Windows API,在这个函数前面加::是可以的。你的工程中用到了什么名字空间?
缘中人 2012-10-12
  • 打赏
  • 举报
回复
CopyFile ,你在哪个代码里用,工程怎么建立的,这个是API,不会这么复杂啊
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
copyfile 注意大小写
[/Quote]
嗯,是CopyFile 提示的是call of nonfunction
缘中人 2012-10-12
  • 打赏
  • 举报
回复
copyfile 注意大小写
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
::是表示域的操作符,对于Windows API来说,前面加::可以和VCL一些同名的函数区别出来。而VCL的函数光加::则是画蛇添足,如果不指明名字空间,就会起反作用。
[/Quote]

就比如用copyfile函数,右键find Declaration 可以找到这个函数,为什么不能直接用这个函数?
谢谢啊,我刚开始学习
ccrun.com 2012-10-12
  • 打赏
  • 举报
回复
::是表示域的操作符,对于Windows API来说,前面加::可以和VCL一些同名的函数区别出来。而VCL的函数光加::则是画蛇添足,如果不指明名字空间,就会起反作用。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧