【问题标题】:NI-VISA library programming in C++ - out of scope errorC++ 中的 NI-VISA 库编程 - 超出范围错误
【发布时间】:2015-07-13 16:38:03
【问题描述】:

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

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

【问题讨论】:

  • #import 不是标准 C++。也许试试#include
  • 我做了,一不小心把import写下来了
  • visa.h 遵循以大写字母开头的类型和以小写字母开头的函数的约定,并且常量都是大写的。

标签: c++ eclipse netbeans codeblocks visa


【解决方案1】:

函数被称为viOpenDefaultRM,而不是ViOpenDefaultRM

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

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

viOpenDefaultRM的声明是:

ViStatus _VI_FUNC  viOpenDefaultRM (ViPSession vi);

您将在visa.h 中找到它,并且它在您所在位置的范围内 试图打电话给ViOpenDefaultRM,因为包括visa.h 在定义main 之前,它在包含main 的范围内声明, 即在全球范围内。

【讨论】:

  • 完美。你不知道我为此苦苦挣扎了多久。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
相关资源
最近更新 更多