0

我目前正在尝试对 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

这真的很奇怪,因为它显然在范围内。这已经给我带来了这么多天的麻烦 - 任何帮助将不胜感激。谢谢!

4

1 回答 1

1

该函数被调用viOpenDefaultRM,而不是ViOpenDefaultRM

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

在 C++ 中,编译器必须先查看函数的声明,然后才能允许调用该函数,以便它可以判断调用是否符合函数的签名(或重载函数的签名之一),以及声明在调用点必须仍在范围内。

的声明viOpenDefaultRM是:

ViStatus _VI_FUNC  viOpenDefaultRM (ViPSession vi);

您将在 中找到它visa.h,并且它在您尝试调用的点的范围内,ViOpenDefaultRM因为通过visa.h 在您定义之前包含main它,它被声明在封闭的范围内main,即在全局范围内。

于 2015-07-13T18:19:27.050 回答