C ++中的NI-VISA库编程 - 超出范围错误

时间:2015-07-13 16:38:04

标签: c++ eclipse netbeans codeblocks visa

我目前正在尝试对Rigol DS1054示波器进行编程以输出波形数据。为了创建这个程序,我使用Code :: Blocks在C ++中编写,但我在其他四个编译器(Netbeans,Eclipse Mars,Eclipse Juno,Visual Basic 2012)上尝试过这个,但是每个编译器都会连续导致错误。以下是我到目前为止所做的事情:

  • 通过构建和运行Hello World程序确认C ++不是问题
  • 按照此路径链接头文件(C:\ Program Files(x86)\ IVI Foundation \ VISA \ WinNT \ Include)
  • 使用此路径链接库(C:\ Program Files(x86)\ IVI Foundation \ VISA \ WinNT \ lib \ msc \ visa32.lib)
  • 为每个项目应用库

我也试过使用64位版本,我得到了同样的错误。这是我目前的代码:

#include <iostream>
#include <visa.h>
using namespace std; 

int main () {

   ViSession rmSession;
   ViOpenDefaultRM(&rmSession);

   return 0;
}

代码非常简单,但运行时会返回此错误:

error: 'ViOpenDefaultRm' was not declared in this scope

这很奇怪,因为它显然属于范围。这给了我很多天的麻烦 - 任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

该函数名为ViOpenDefaultRM,而不是ViOpenDefaultRM(&rmSession)

为避免将来因此类错误而造成混淆, 代码中的viOpenDefaultRM不是声明 一个函数,它是一个函数的调用或调用(或者,如果是这样的话 存在的功能)。

在C ++中,编译器必须看到函数的声明 在它允许调用该函数之前,它可以告诉它 调用是否符合函数的签名(或者其中一个) 重载函数的签名),声明必须是 仍然在调用范围内。

ViStatus _VI_FUNC viOpenDefaultRM (ViPSession vi); 的声明是:

visa.h

您可以在ViOpenDefaultRM找到它,它就在您的范围内 试图通过加入visa.h来致电main 在定义main之前,它在封闭{{1}}的范围内声明, 即在全球范围内。