2 zh523 zh523 于 2016.01.25 23:08 提问

Linux 下编译C出错(windows编译正常)

Ubuntu 15
gcc version 5.2.1
错误:
图片说明

scritpt.hpp下是一个 命名空间
namespace script{
....
int setData( PyObject * pObj, Vector4 & rVal, const char * varName = "" );
int setData( PyObject * pObj, Matrix & rVal, const char * varName = "" );
int setData( PyObject * pObj, PyObject * & rVal,
const char * varName = "" );
int setData( PyObject * pObj, SmartPointer & rPyObject,
const char * varName = "" );
int setData( PyObject * pObj, Capabilities & rCaps,
const char * varName = "" );
int setData( PyObject * pObj, std::string & rString,
const char * varName = "" );
int setData( PyObject * pObj, std::wstring & rString,
const char * varName = "" );
int setData( PyObject * pObj, char * & rString,
const char * varName = "" );
int setData( PyObject * pObj, Mercury::Address & rAddr,
const char * varName = "" );

template <class T>
PyObject * getReadOnlyData( const T & d )
{
    return getData( d ); //出问题的地方126行
}

PyObject * getData( const bool data );
PyObject * getData( const int data );
PyObject * getData( const uint data );
....

}

stl_to_py.cpp
PyObject * Script::getData( const PySTLSequenceHolderBase & holder ) //出错位置
{
return new PySTLSequence(
const_cast(holder), holder.pOwner() );
}

stl_to_py.hpp 中
namespace Script
{
int setData( PyObject * pObject, PySTLSequenceHolderBase & data,
const char * varName = "" );

PyObject * getData( const PySTLSequenceHolderBase & data );

};

不知道哪里出错了,求大神指点

是有定义了的
定义在st_to_py.hpp中
note:
stl_to_py.cpp:506 'PyObjest * Script::getData(const PySTLSequenceHoldBase &) ' declared here ,later in the translation unit
PyObjest * Script::getData(const PySTLSequenceHoldBase & holder)

st_to_py.hpp 是 include了 script.hpp

这个在window环境下是能编译通过的

4个回答

qq_27183003
qq_27183003   Ds   Rxr 2016.01.25 23:32
已采纳

把声明放前面试试:

PyObject * getData( const bool data );
PyObject * getData( const int data );
PyObject * getData( const uint data );

 template <class T>
PyObject * getReadOnlyData( const T & d )
{
    return getData( d ); //出问题的地方126行
}


zh523
zh523 能说说愿意吗
2 年多之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.25 23:29

从出错信息看:getData( d )未定义,检查一下看看吧,没看到定义部分。

xyz347
xyz347   2016.01.26 08:19

this->getData

Royal_lr
Royal_lr   Ds   Rxr 2016.01.26 13:40

方法未声明,,,,,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Linux下的C文件在windows下中文显示乱码解决
Linux下的C文件在windows下中文显示乱码解决       今天在ubuntu15.10系统下的geanyIDE下写了个遗传算法的程序,编译器是gcc5.2.1。但是这个文件放在win7的Dev C++下出现了中文显示乱码的问题,果断度娘,发现了一些解决办法。简单说一个最简单的方法……        下一个Notepad++!打开文件并没有出现中文乱码问题。Notepad++是 Windo
windows命令行(或linux)下用gcc/g++编译多个c/cpp文件
最近一直强迫自己用命令行的方式来编译连接运行文件,当然这个在单个文件的情况下还是很好搞定的嘛。。。 不过在开始学会把一个程序分成几个文件后(有头文件之类的和其他的几个c/cpp文件),不知道怎么编译运行就是个问题了,而且会出现一些常见错误。        下面主要介绍下常用的方式:         单个文件的情况:         g++  filename.cpp         这是
linux c/c++ 编译没错,运行出错
问题记录- 1.当glibc detected *** free(): invalid next size (normal)出现 http://blog.csdn.net/mociml/article/details/6286311  2. 段错误:smallbin double linked list corrupted http://blog.csdn.net/shaochat/a
Windows下C++程序移植到Linux上的几个问题及解决方法
今天帮朋友从Windows下移植一个小程序到Linux下,遇到了两个问题,在这里分享一下解决方法。     刚开始觉得,移植应该很简单,就是重新再Linux下编译一次就可以了。但是遇到了,不少问题。下面一一说明。     1、fopen_s()函数报错。        原因是,fopen_s()这个函数并不是标准的C++库中的函数,是微软特有的,也就是说如果你用VS编译不会有问题,但是如果你
在linux下编译cpp文件出现错误
今天是开始学习QT的第二天,由于我的粗心大意,又有东西可以爆料了!!!! 昨天终于把在linux环境下开发QT的环境给搭建好了,还按照书上的教程编了几个程序,感觉挺不错的哈! 今天开始创建对话框(在不通过qt createIDE工具的时候),果然问题出现了。 先是因为照着书上的源码开始码代码,估计也是手指在键盘上,心不知道飞到哪个地方去了,码完后上来就是一大段的错误,不是头文件没包含就是函数
让Windows像Linux一样编译C/C++
1.cl命令配置         习惯Linux编程的人都知道gcc/g++配合vi/vim/gvim功能的强大以及编程的便捷性,尽管Windows下有功能强大的集成开发环境VS系列,但是很多情况下我们希望快捷的编写一些小程序,而不希望生成几十M甚至几百M的项目,这时候我们会不会相当怀念Linux呢?         其实只要安装了VS或者VC,都可以实现像Linux一样,在DOS命令行下实现
如何在Windows下使用Linux系统来编译和运行程序?
很多开发人员都有这样的疑问:自己平时是在Windows下面办公的,而自己编写的程序的运行环境又是Linux的,如何从Windows切换到Linux呢?是不是要专门到Linux机器上去编写代码呢?实际上,只要在Windows下安装一个叫做SecureCRT的软件和一个叫做FileZilla的软件,便可轻松解决问题。 SecureCRT和FileZilla简介SecureCRT是一款支持SSH(SSH
在windows下写linux代码直接编译
大多数人都习惯于在windows下用source insight编辑代码,然后用xftp拷贝到linux下进行编译,如果有小的改动,就直接在linux下用vim进行编辑修改。至于为什么是vim,工作这么多年,还没有一家公司的服务器是带界面的,可以安装使用ide的。 稍微进阶一点的办法,就是实现linux和windows文件夹共享,我们在windows上直接对着共享文件夹内的代码进行编辑,然后就在
cJSON 可以直接在linux,或 windows C/C++编译器下直接编译使用
cJSON 可以直接在linux,或 windows C/C++编译器下直接编译使用
模拟Linux命令行方式在Windows下编译C/C++程序(使用VS编译器)
3、打开cmd命令行界面, 输入F:换到F盘, 最终定位到test.c所在文件夹, 使用cl编译器编译test.c程序,弹出系统错误。 bin目录下的cl.exe是Microsoft C/C++编译器。 关于打开cmd快捷键的方法:windows+R->弹出运行窗口,输入cmd即可。更简单的方法可以手动添加一个快捷键,从开始菜单 -> 附件 -> 找到“命令提示符”,右键->属性,其中