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

NI-VISA library programming in C++ - out of scope error

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

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

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

int main () {

   ViSession rmSession;
   ViOpenDefaultRM(&rmSession);

   return 0;
}

代码很简单,但是当运行、returns这个错误:

error: 'ViOpenDefaultRm' was not declared in this scope

这确实很奇怪,因为它显然在范围内。这么多天以来,这一直给我带来麻烦 - 任何帮助将不胜感激。谢谢!

调用的函数是viOpenDefaultRM,而不是ViOpenDefaultRM

为了避免您以后因此类错误而感到困惑, 您代码中的 ViOpenDefaultRM(&rmSession) 不是 声明 一个函数,它是一个函数的调用或调用(或者如果这样的话 存在一个函数)。

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

viOpenDefaultRM的声明是:

ViStatus _VI_FUNC  viOpenDefaultRM (ViPSession vi);

您会在 visa.h 中找到它,并且它在您所在位置的范围内 已尝试调用 ViOpenDefaultRM,因为通过包含 visa.h 在定义 main 之前,它是在包含 main 的范围内声明的, 即在全球范围内。