VS2017 在编译时出现错误E2512 功能测试宏的参数必须是简单标识符

图片说明
VS2017 在编译时出现错误E2512 功能测试宏的参数必须是简单标识符
我是用vs2017 搭建的pcl库

从教程copy了一段代码,用的时候就出现问题

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>//标准C++库中的输入输出类相关头文件。
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>//pcd 读写类相关的头文件。
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h> //PCL中支持的点类型头文件。
#include<fstream>  
#include <string>  
#include <vector> 

using namespace std;

int main()
{
    typedef struct tagPOINT_3D
    {
        double x;  //mm world coordinate x  
        double y;  //mm world coordinate y  
        double z;  //mm world coordinate z  
        double r;
    }POINT_WORLD;


    /////加载txt数据  
    int number_Txt;
    FILE *fp_txt;
    tagPOINT_3D TxtPoint;
    vector<tagPOINT_3D> m_vTxtPoints;
    fp_txt = fopen("za.txt", "r");
    if (fp_txt)
    {
        while (fscanf(fp_txt, "%lf %lf %lf", &TxtPoint.x, &TxtPoint.y, &TxtPoint.z) != EOF)
        {
            m_vTxtPoints.push_back(TxtPoint);
        }
    }
    else
        cout << "txt数据加载失败!" << endl;
    number_Txt = m_vTxtPoints.size();
    //pcl::PointCloud<pcl::PointXYZ> cloud;
    //这里使用“PointXYZ”是因为我后面给的点云信息是包含的三维坐标,同时还有点云信息包含的rgb颜色信息的或者还有包含rgba颜色和强度信息。
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    // Fill in the cloud data  
    cloud->width = number_Txt;
    cloud->height = 1;
    cloud->is_dense = false;
    cloud->points.resize(cloud->width * cloud->height);
    for (size_t i = 0; i < cloud->points.size(); ++i)
    {
        cloud->points[i].x = m_vTxtPoints[i].x;
        cloud->points[i].y = m_vTxtPoints[i].y;
        cloud->points[i].z = m_vTxtPoints[i].z;
    }
    pcl::io::savePCDFileASCII("txt2pcd_bunny1.pcd", *cloud);
    std::cerr << "Saved " << cloud->points.size() << " data points to txt2pcd.pcd." << std::endl;

    //for (size_t i = 0; i < cloud.points.size(); ++i)
    //  std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;

    //PCL Visualizer
    // Viewer  
    pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
    viewer.addPointCloud(cloud);
    viewer.setBackgroundColor(0, 0, 0);

    viewer.spin();
    system("pause");
    return 0;

}
1

3个回答

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 'vtkMapper::ImmediateModeRenderingOff': 被声明为已否决 opencv-001 c:\program files\pcl 1.9.1\include\pcl-1.9\pcl\visualization\impl\pcl_visualizer.hpp 1545

请问一下你这个错误怎么解决的

0
weixin_43913703
weixin_43913703 关闭SDL检查即可
大约一个月之前 回复
u013226489
Well_Jin C4996错误,在编译里面加预编译指令
3 个月之前 回复
candlewhip
candlewhip 请问您解决这个问题了吗?
3 个月之前 回复

您的这个VS2017 在编译时出现错误E2512 功能测试宏的参数必须是简单标识符问题解决了吗?

0

VS2017 在编译时出现错误E2512 功能测试宏的参数必须是简单标识符是因为
参数不齐,可能是缺少组成员,符号错误,函数不完整导致的

例1.
我.h头文件对某个槽函数进行了声明,但未在.cpp槽中槽进行定义
我在studentManager.h头文件定义了两个槽函数btn_ok和btn_no

#include <QtWidgets/QDialog>
#include "ui_studentManager.h"
#include <QString>
#include <QDebug>



class studentManager : public QDialog
{
    Q_OBJECT

public:
    studentManager(QWidget *parent = Q_NULLPTR);

private:
    Ui::studentManagerClass ui;


//声明btn_ok和btn_no槽函数
public slots:
    void btn_ok();
    void btn_no();







};

但在studentManager.cpp中只对btn_ok进行了定义函数,未对btn_no进行定义


#include "stdafx.h"
#include "studentManager.h"
#include <QString> //QT参数获取支持
#include <QDebug> //QT调试输出支持
#include <QMessagebo>



studentManager::studentManager(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
}



//定义btn_ok槽函数
void studentManager::btn_ok()
{

}

所以就出现了功能测试宏的参数必须是简单标识符的问题。
这个时候只需要在studentManager.cpp对我已声明的btn_no进行添加定义就可以了

//定义btn_no槽函数
void studentManager::btn_no()
{

}
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
windows10 VS2017 下PCL1.9.1配置问题(已解决)
windows10 VS2017 下PCL1.9.1配置问题(已解决) 第一次用PCL这个库,碰到许多的问题。把一些问题记录在这里,这样有同样的人遇到也可以解决。 配置 基本的配置我就不说了,大家可以参考下这篇博客。我觉得已经说的很详细了。 尤其是建议大家弄一个属性表,这样之后就不需要在配置了。 问题 在我参照这篇博客配置完成之后遇到了好几个问题。 E2512功能测试宏的参数必须是简单表示符 VS...
C++ 一个引起C2512错的原因
一个比较基本的错误。 当主类含有其他类的对象(注意是对象)的时候(未特殊定义构造参数), 运行时调用的是该对象的默认构造函数。此时若该类无默认构造函数(当只定义了带参数的构造函数时,是不会有隐藏的默认构造函数的), 则会报错C2512,并误给出主类的默认构造函数缺失的信息。 此时可使用指向其他类的一个指针来解决此问题。 使用时候在告诉如何构造此对象。
Qt 插件机制以及插件中几个重要的宏
简述: Qt 插件类必须继承自 QObject 类和插件接口类。若没有 Q_DECLARE_INTERFACE 和 Q_INTERFACES 这两个宏,就无法对从插件中获取的实例指针进行 qobject_cast 映射。可以通过 QPluginLoader 类调用插件类。 1、接口类 首先,定义一个纯虚类作为插件接口类。
功能测试宏
UNIX的功能测试宏,在头文件中定义了很多POSIX.1和XPG3的符号。但是除了POSIX.1和XPG3定义外,大多数实现在这些头文件中也加上了他们自己的定义。如果在编译一个程序时,希望它只是用POSIX定义而不使用任何实现定义的限制,那么就需要定义常数_POSIX_SOURCE,所有POSIX.1头文件中都是用此常数。当该常数定义时,就能排除任何实现专有的定义。常数_POSIX_SOURCE及对
C++ 带有参数的宏定义
宏定义中 多行时用"\"换行。 #define CHECKFILE(state, path) \ if (!state) \ {\ fprintf(stderr, "At file %s, line %d: \nFile open error: %s\n", __FILE__, __LINE_
qt5与qt4的变更
QT_WA错误:  error: C2143: 语法错误 : 缺少“)”(在“{”的前面) 解决方法: #if QT_VERSION >= 0x050000 #define QT_WA(unicode, ansi) unicode #endif https://qt.gitorious.org/qt-solutions/ov3r1oads-qt-solutions/commit/
VS2013开发QT时提示很多未定义标识符(不影响编译)
类似这种红色po浪线。 有人说完全编译就行了,但我试了不行。 好了
qt中宏定义及c++中不带参数宏定义
内容提要:下面讲的是qt中宏定义及c++中不带参数宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。  格式:  #define 标识符 字符串  其中的标识符就是所谓的符号常量,也称为“宏名”。  预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。  掌握&quot;宏&quot;概念的关键是“换”下面讲的是qt中宏定义及c++中不带参数宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。  格式:  #defi...
VTK笔记——如何显示三维坐标系
对于三维空间中的模型,它是投射到二维平面显示,很多时候,我们需要知道它在坐标系的位置或者相对于另一个模型的位置,又或者是它的法向量等,这时候借助显示坐标系就很有必要,下面的方法可能会帮助到你。 方法一 借助vtkLineSource来画三条线,分别是X, Y, Z轴,再给三条轴设置不同的color加以区分。 vtkSmartPointer&lt;vtkLineSource&gt; line...
Visual Studio编译scanf函数报错提示:C4996
visual stduio2017使用scanf函数报错C4996严重性 代码 说明 项目 文件 行 禁止显示状态错误 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS....
Qt5+VS2017点击按钮打开新窗口
居然没找到相关教程,一个人搞了好久… 1.新建新工程 使用VS新建一个qt工程:点击“Qt GUI Application”或者“创建新项目”创建新工程。 然后“Next”—&amp;amp;gt;“Next”—&amp;amp;gt;&amp;quot;Finish&amp;quot;完成,中间不用更改任何参数。 2.添加按钮和槽函数 双击“解决方案资源管理器”中的“XXX.ui”打开ui编辑界面,拖一个PushButton在中间去。 保存之后回到VS,...
VS2017下引用BOOST报E2512错:功能测试宏的参数必须是简单标识符
最近在编译一个开源项目,用到了BOOST,下了1.69版,也试过nuget上的1.68版,在build的时候都会有一个错,E2512,功能测试宏的参数必须 是简单标识符,没有想通是什么方面的问题,请指点。rnrn严重性 代码 说明 项目 文件 行 禁止显示状态rn错误(活动) E2512 功能测试宏的参数必须是简单标识符 E:\workspace\vc_dll\boost\boost_1_69_0\boost\system\detail\config.hpp 51 rnrn代码rn[code=c]#ifndef BOOST_SYSTEM_DETAIL_CONFIG_HPP_INCLUDEDrn#define BOOST_SYSTEM_DETAIL_CONFIG_HPP_INCLUDEDrnrn// Copyright 2018 Peter Dimovrn//rn// Distributed under the Boost Software License, Version 1.0. (See accompanyingrn// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)rn//rn// See http://www.boost.org/libs/system for documentation.rnrn#include rn#include rnrn// BOOST_SYSTEM_HAS_SYSTEM_ERRORrnrn#if !defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR)rn# define BOOST_SYSTEM_HAS_SYSTEM_ERRORrn#endifrnrn#if BOOST_WORKAROUND(BOOST_GCC, < 40600)rn// g++ 4.4's is not good enoughrn# undef BOOST_SYSTEM_HAS_SYSTEM_ERRORrn#endifrnrn// BOOST_SYSTEM_NOEXCEPTrn// Retained for backward compatibilityrnrn#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPTrnrn// BOOST_SYSTEM_HAS_CONSTEXPRrnrn#if !defined(BOOST_NO_CXX14_CONSTEXPR)rn# define BOOST_SYSTEM_HAS_CONSTEXPRrn#endifrnrn#if BOOST_WORKAROUND(BOOST_GCC, < 60000)rn# undef BOOST_SYSTEM_HAS_CONSTEXPRrn#endifrnrn#if defined(BOOST_SYSTEM_HAS_CONSTEXPR)rn# define BOOST_SYSTEM_CONSTEXPR constexprrn#elsern# define BOOST_SYSTEM_CONSTEXPRrn#endifrnrn// BOOST_SYSTEM_REQUIRE_CONST_INITrnrn#define BOOST_SYSTEM_REQUIRE_CONST_INITrnrn#if defined(__has_cpp_attribute)rn#if __has_cpp_attribute(clang::require_constant_initialization)rn# undef BOOST_SYSTEM_REQUIRE_CONST_INITrn# define BOOST_SYSTEM_REQUIRE_CONST_INIT [[clang::require_constant_initialization]]rn#endifrn#endifrnrn#endif // BOOST_SYSTEM_DETAIL_CONFIG_HPP_INCLUDEDrnrn[/code]rnrn#if __has_cpp_attribute(clang::require_constant_initialization)rn这行
VS2010 c++ 错误的处理方法 (不断更新....)
1错误: fatal error C1010: unexpected endof file while looking for precompiled header. Did you forget toadd '#include"StdAfx.h"' to your source?   #include"StdAfx.h" 你把这个放在头文件里面就行了 2 vc++编程出现错误error
宏定义有参数跟没参数的区别
宏定义有无参数宏定义和带参数宏定义两种。    无参数的宏定义的一般形式为             # define 标识符 字符序列 其中# define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间用空格符分隔。这种宏定义要求编译预处理程序将源程序中随后所有的定名的出现(注释与字符串常量中的除外)均用字符序列替换之。前面经常使用的定义符号常量是宏定义的最简单应用。如有
GCC编译时增加宏定义-D标识符,相当于宏定义#define 标识符
GCC编译时增加宏定义-D&amp;amp;amp;lt;标识符&amp;amp;amp;gt;,相当于#define &amp;amp;amp;lt;标识符&amp;amp;amp;gt;,可以在遇到条件编译时执行。 #ifdef &amp;amp;amp;lt;标识符&amp;amp;amp;gt; //条件编译内容 #endif 例子: 搭配gcc编译命令:gcc -DDEBUG -g -o main.out main.c (注意-D&amp;amp;amp;lt;标识符&amp;
编译错误,需要标识符
ackage day0415; import java.util.Arrays; public class CardsPractice { public static void main(String[] args) { Card[] cards = new Card[54]; int i=0; for(int rank = Card.TH
Clang中的属性
  介绍 功能属性 #pragma omp declare simd #pragma omp声明目标 _Noreturn abi_tag(gnu :: abi_tag) acquire_capability(acquire_shared_capability,clang :: acquire_capability,clang :: acquire_shared_capabil...
vs2017错误:当前页面的脚本发生错误
问题描述: 编译或运行的时候提示如下 但是点击之后,程序仍然可以继续运行,但是每次都弹出来确实很烦。 另外,错误提示可能不仅仅是缺少标识符。字符串或数字,也有可能是对象不支持“XXXX”属性或方法,但是解决方法都是一样的 解决方法: 这个问题其实微软已经发现了,下个版本更新估计会解决这个bug 临时解决方法:到图片提示的路径下找到对应文件里边的出错地方,删除掉就行,不影响的...
vs2013编译错误代码锦集
编译器错误 C2001  错误消息                            常数中有换行符                           字符串常数不能继续到第二行,除非进行下列操作:                           •用反斜杠结束第一行。                          •用一个双引号结束第一行上的字符串,并在下一行用另一个双引号
为什么MFC编程中总是出现“未定义的标识符”错误?(尝试去Resource.h中找问题)
MFC项目中经常会发现的错误是“未定义的标识符”? 解决办法,我们找到resource.h这个文件,问题的原因大多是因为编译器在你的这个头文件中找不到这个标识符,因为你没包含该文件,有可能你生成的控件ID名修改之后还未在resourc.h中编号更新,这时你打开该文件之后,在该文件中找到修改后的控件,你会发现可能出现如下情况: #define IDC_Button 1006 #define IDC_...
利用命令行编译Java文件时出现“需要<>标识符”的错误
class { public static void main(String[] args) { System.out.println("Hello World!"); } } 如上面那段测试代码所示,编译时就会提示“需要
vs在编写c++时报错找不到标识符
C++的编译是以.cpp为单元的,cpp编译时是“顺序编译”的,所以在main函数中使用,却在其之后定义的函数,自然找不到标识符。 两种解决方案:         1 在main函数之前先定义一下,编写函数的实际内容时就可以放在main之后了;           例如WndProc就在main之前定义了一下:           LRESULT CALLBACK WndProc (HWN
vs提示大量未声明标识符,语法错误缺少:“;”
后发现此warning 遂将#include "stdafx.h"放在所有头文件前,编译通过 不明所以,查资料  stdafx.h VC创建项目时自动创建的预编译头文件,在编译其他文件之前,VC先预编译此文件。头文件stdafx.h引入了项目中需要的一些通用的头文件,比如window.h等,在自己的头文件中包括stdafx.h就包含了那些通用的头文件。    所谓头
flex编译错误说明
代码 消息 说明   1000 对 %s 的引用不明确。 引用可能指向多项。例如,下面使用了 rss 和 xml 命名空间。每个命名空间为 hello() 函数定义了不同的值。trace(hello()) 语句返回此错误,因为它无法确定使用哪个命名空间。 private namespace rss; private namespace xml; public function Er
define定义的标识符和宏的异同
预编译(预处理或者预处理器处理) 预定义符号            #include #include #define DEBUG_PRINT() \ printf("file:%s line:%d date:%s time:%s\n",\ __FILE__,__LINE__,__DATE__,__TIME__) int main() { DEBUG_PRINT(); //pri
常数必须是编译时常量!
const变量 到目前为止,all of the变量我们看见have been非常-那是,他们可以在任何时间改变了收益。例如: 1 2 int x { 4 }; // initialize x with the value of 4 x = 5; // change value of x to 5 然而,它有时是有用的,以确定变量的值,不能改变。举例来说,考虑地球重力的值:9.8米/秒2。这
C语言之关键字、宏定义、条件编译
一 全局变量和局部变量 变量作用域:变量的可用范围按照作用域的不同,变量可以分为:局部变量和全局变量 局部变量:定义在函数内部的变量以及函数的形参称为局部变量 作用域:从定义哪一行开始直到与其所在的代码块结束(遇到return为止) 生命周期:从程序运行到定义哪一行开始分配存储空间到程序离开该变量所在的作用域 特点: 1、相同作用域内不可以定义同名变量 2、不同作用范围可以定义同名变量,内部作用域
软件功能测试案例分析
开始进行功能测试,在这里分享关于功能测试的一个小例子
Win+opencv+VS常见错误整理
1. 未定义标识符 修改: 2. errorLNK2019: 无法解析的外部符号 _cvHaarDetectObjects,该符号在函数"void __cdecl detect_and_draw(struct _IplImage *)"(?detect_and_draw@@YAXPAU_IplImage@@@Z) 中被引用的解决办法。 遇到这种问...
[cpp]C++中的宏定义
1.不带参数的宏定义:        宏定义又称为宏代换、宏替换,简称“宏”。   格式:   #define 标识符 字符串   其中的标识符就是所谓的符号常量,也称为“宏名”。   预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。   掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。   即在对相关命令
解决vtk 导致pcl编译出现相关未引用问题
大家好,最近发现来了libpq-dev问题,后来发现是vtk版本导致,apt-get 的确问题比较大,只能编译vtk、libpq等源码。
解决vs2015使用fopen、fprintf等函数报错的问题
解决vs2015使用fopen、fprintf等函数报错的问题 出现错误提示: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help fo
简单的Linux基本操作,预处理标识符以及宏定义
1. linux环境实践,熟悉使用(网络搜索)    ls //list 列出当前文件夹的所有文件     cd //change directory 更改(切换)目录     mkdir //make directory 创建目录(文件夹)    rm //remove 删除文件(-f)    mv //move 移动文件     touch //创建文件     pwd //print wor...
关于VS2017在编译代码时出现奇怪错误的情况分析
事先说明,本文章仅仅对Alex Mercer 写的博客中的代码生效!!! 进入正题: 在复制粘贴代码测试的时候,如果出现了类似于以下的问题: 出现这种奇奇怪怪的现象,不必着急,这是因为代码与代码间的空行太大, 编译器无法迅速的找到对应头文件,库,以及变量和函数的定义,甚至是关键字! 解决的方法很简单,直接进行编译。没错!直接进行编译 这是我这里的结果,相信使用VS201...
已经声明过变量,依然报 C2065:未声明的标识符错误 解决办法
vs,c++编译代码的时候,遇到很奇怪的问题,明明在前面,已经声明过变量,编译的时候仍然报 未声明的标识符错误,定位错误地方,在赋值之前,明明定义过变量了啊,非常疑惑,下面贴上代码,火眼金睛的你能不能找到原因:      if (fr = mat.cols() || fr + 1 >= mat.rows()) //return Color::NO; Color ret = Color
VS c2065 未声明的标识符 另外一种解决方案
有时候声明了变量,但是编译时通不过 就像这样 检查头文件也没错,怎么办? 改下编码~~  如果有中文注释的话,就要把文档格式改为 936(简体中文) 点击: “文件”->“高级保存选项” 然后修改编码即可
使常数必须是编译时常量!
将函数参数常量做两件事。首先,它告诉人调用函数,函数不会改变自我价值的价值。其次,它确保功能不改变自我价值的价值。 constexpr C++实际上有两种不同的常数。运行时常量的初始化值只能在运行时(如变量usersage和自我价值以上)。编译时常量的初始化值可以在编译时(如变量的重力)来解决。在大多数情况下,它不重要,无论是一个常量值是运行时或编译时间。然而,有一些奇怪的情况下,C++需要编
Oracle 报错:PLS-00201: 必须声明标识符
原因:调用其他用户的包或存储过程. 解决方法:在被调用的包或存储过程的用户下授权执行权限给调用用户: grant execute on 包名 to 用户名;
VS常见编译问题
1、error C2065: 'Vector' : undeclared indentifier 分析: 没有包含文件vector ,同时 加上命名空间: using namespace std; 如果添加了#include &amp;lt;vector&amp;gt; 但是没有使用命名空间std,会爆出:“syntax error: identifier 'vector'” 的错误;...
写存储过程时出的错误:PLS-00201: 必须声明标识符
create table gpscoordinate( id int primary key, longitude VARCHAR(32), latitude VARCHAR(32) name VARCHAR(32), time VARCHAR(32) ); CREATE TYPE department_type AS OBJECT ( longitude VARCHAR(
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据功能测试教程 vs2017制作网页视频