gcc的奇怪行为。是C++;{}和=等于或不等于的对象定义? 我测试了将处理过程中的模拟转换成C++的可能性。 但奇怪的事情发生了: class World { public: sarray<pAnt> dummy1 { new array<pAnt>(10) };//OK sarray<pAnt> dummy2 = new array<pAnt>(10); //Compiler error?!?!?!* smatrix<pAnt> dummyWorld1 { new matrix<pAnt>(100,100) };//OK smatrix<pAnt> dummyWorld2 = new matrix<pAnt>(100,100);//OK smatrix<int> ants = new matrix<int>(50,2);// OK ... }; 阶级世界{ 公众: sarray dummy1{新数组(10)};//确定 sarray dummy2=新数组(10);//编译器错误* smatrix dummyWorld1{新矩阵(100100)};//确定 smatrix dummyWorld2=新矩阵(100100);//确定 smatrix ants=新矩阵(50,2);//确定 ... };
错误: /data/wb/SCC/\uuuuu working\uu copies/Processing2C/PROJECTS/MROWKI/cppsrc/klasaWorld.pde.cpp:27: 错误:无法绑定类型为的非常量左值引用 'Processing::sarrayProcessing::ptr&'转换为类型为的右值 '处理::sarrayProcessing::ptr'gcc的奇怪行为。是C++;{}和=等于或不等于的对象定义? 我测试了将处理过程中的模拟转换成C++的可能性。 但奇怪的事情发生了: class World { public: sarray<pAnt> dummy1 { new array<pAnt>(10) };//OK sarray<pAnt> dummy2 = new array<pAnt>(10); //Compiler error?!?!?!* smatrix<pAnt> dummyWorld1 { new matrix<pAnt>(100,100) };//OK smatrix<pAnt> dummyWorld2 = new matrix<pAnt>(100,100);//OK smatrix<int> ants = new matrix<int>(50,2);// OK ... }; 阶级世界{ 公众: sarray dummy1{新数组(10)};//确定 sarray dummy2=新数组(10);//编译器错误* smatrix dummyWorld1{新矩阵(100100)};//确定 smatrix dummyWorld2=新矩阵(100100);//确定 smatrix ants=新矩阵(50,2);//确定 ... };,c++,gcc,compiler-construction,C++,Gcc,Compiler Construction,错误: /data/wb/SCC/\uuuuu working\uu copies/Processing2C/PROJECTS/MROWKI/cppsrc/klasaWorld.pde.cpp:27: 错误:无法绑定类型为的非常量左值引用 'Processing::sarrayProcessing::ptr&'转换为类型为的右值 '处理::sarrayProcessing::ptr' sarray dummy2=新数组(10)//编译器错误?!? “详细”编译器输出: [1/2 3.5/秒
sarray dummy2=新数组(10)//编译器错误?!?
“详细”编译器输出:
[1/2 3.5/秒]构建CXX对象
CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/___working_copies/Processing2C/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o
失败:
CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/___working_copies/Processing2C/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o
/usr/bin/g++-DDEF_MAXTHREADS=16-dmultr-DVERSION_NUM=0.1
-I/data/wb/SCC/\uuuuu-working\u-copies/Processing2C/PROJECTS/MROWKI/cppsrc-I/home/borkowsk/SCC/\uuu-working\u-copies/Processing2C/PROJECTS/MROWKI/../scripts//lib/include
-I/data/wb/SCC/uuu-working\u-copies/symShell2/WBRTM\u-Linux-I/data/wb/SCC/u-working\u-copies/symShell2/WBRTM\u-Linux/INCLUDE--verbose-std=c++11-pthread-MD-MT-CMakeFiles/MROWKI\u 0.1\u once.dir/data/wb/SCC/u-working\u-copies/Processing2C/PROJECTS/MROWKI/cpsrc/project\u-at\u once.cpp.o
-MF CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_复制/处理2c/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o.d
-o CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_拷贝/Processing2C/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o
-c/data/wb/SCC/\u工作副本/处理2C/PROJECTS/MROWKI/cppsrc/project\u at\u once.cpp
使用内置规格。收集\u GCC=/usr/bin/g++
卸载\目标\名称=nvptx无卸载\目标\默认值=1个目标:
x86_64-linux-gnu配置为:../src/configure-v
--使用pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04'——使用bugurl=file:///usr/share/doc/gcc-7/README.Bugs ——启用语言= C、艾达、C++、GO、BRIG、D、FORTRAN、Objc,obj-c++--prefix=/usr--仅限gcc主版本--程序后缀=-7--程序前缀=x86_64-linux-gnu----启用共享--启用链接器构建id--libexecdir=/usr/lib--不包括gettext--启用线程=posix--libdir=/usr/lib--启用nls--启用引导--启用clocale=gnu--启用libstdcxx调试--启用libstdcxx时间=是--使用默认libstdcxx abi=new--启用gnu唯一对象--禁用vtable验证--启用libmpx--启用插件--启用默认饼图--使用系统zlib--使用目标系统zlib--启用objc gc=auto--启用多库--禁用werror--使用-arch-32=i686--使用abi=m64--使用多库列表=m32,m64,mx32--启用多库--使用tune=generic--启用卸载目标=nvptx none--不使用cuda驱动程序--启用检查=release--构建=x86_64-linux-gnu--主机=x86_64-linux-gnu--目标=x86_64-linux-gnu线程模型:posix gcc版本7.5.0(Ubuntu 7.5.0-3ubuntu1~18.04)
COLLECT_GCC_OPTIONS='-D''DEF_MAXTHREADS=16'-D''MULTITR'-D'
'VERSION_NUM=0.1'-I'
“/data/wb/SCC/\uuuuuu working\uu copies/Processing2C/PROJECTS/MROWKI/cppsrc”
“-我
“/home/borkowsk/SCC/_working_copies/Processing2C/PROJECTS/MROWKI/./../scripts/./lib/include”
“-I”“/data/wb/SCC/u_u工作副本/symShell2/WBRTM_Linux”“-I”
'/data/wb/SCC/_工作副本/symShell2/WBRTM_Linux/包括''-v'
'-std=c++11'-pthread'-MD'-MT'
'cmakfiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_复制/处理2c/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o'
“-MF”
'cmakfiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_复制/处理2c/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o.d'
“-o”
'cmakfiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_复制/处理2c/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o'
'-c'-shared libgcc'-mtune=generic'-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/cc1plus-quiet-v-I
/数据/wb/SCC/工作副本/Processing2C/PROJECTS/MROWKI/cppsrc-I
/home/borkowsk/SCC/_工作副本/Processing2C/PROJECTS/MROWKI/./../scripts/./lib/include
-I/data/wb/SCC/_工作副本/symShell2/WBRTM\u Linux-I/data/wb/SCC/_工作副本/symShell2/WBRTM\u Linux/INCLUDE
-imultimarch x86_64-linux-gnu-MD CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/u工作副本/Processing2C/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.d
-MF CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_复制/处理2c/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o.d
-MT CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/___工作_复制/处理2c/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o
-D_GNU_SOURCE-D_可重入-D DEF_MAXTHREADS=16-D MULTITR-D VERSION_NUM=0.1
/数据/wb/SCC/\uuuuu工作副本/Processing2C/PROJECTS/MROWKI/cppsrc/project\u at\u once.cpp
-quiet-dumpbase project_at_once.cpp-mtune=generic-march=x86-64-auxbase strip CMakeFiles/MROWKI_0.1_once.dir/data/wb/SCC/u working_copies/Processing2C/PROJECTS/MROWKI/cppsrc/project_at_once.cpp.o
-std=c++11-version-fstack-protector-strong-Wformat-Wformat-security-o/tmp/ccaH1ylE.s
GNU C++11(Ubuntu 7.5.0-3ubuntu1~18.04)7.5.0版(x86_64-linux-GNU)
由GNU C版本7.5.0、GMP版本6.1.2、MPFR版本4.0.1、MPC版本1.1.0、isl版本isl-0.19-GMP编制
^
下面是从我的项目中提取的问题。看起来有一行是有罪的,但我不明白为什么:-)
#包括
名称空间处理
{
模板
类ptr
{
//std::共享的ptr;
公众:
ptr();
ptr(ptr&);
//ptr(const ptr&);//这会删除错误,但无法正确实现!
};
模板
类数组
{
//T*含量;
公众:
~array();
阵列(大小N);
};
模板
沙雷类
{//follo
sarray<pAnt> dummy2 = new array<pAnt>(10) ;//Compiler error?!?
#include <memory>
namespace Processing
{
template<class T>
class ptr
{
//std::shared_ptr<T> _ptr;
public:
ptr();
ptr(ptr<T>&);
//ptr(const ptr<T>&);//This removes the error, but can not be implemented properly!
};
template<class T>
class array
{
//T* content;
public:
~array();
array(size_t N);
};
template<class T>
class sarray
{ // When the following line is commented out the error disapper!
// so what is missing in ptr<T> ?
ptr< array<T> > _arr;//opaque smart ptr to array
//std::shared_ptr< array<T> > _arr;//std smart pointer is OK
public:
~sarray(){}
sarray(){}
sarray(array<T>* tab);
sarray<T>& operator = (array<T>* tab);
};
}
using namespace Processing;
void example()
{
sarray<bool> test1 = new array<bool>(2);// Compiler error?
sarray<bool> test2;
test2 = new array<bool>(2);//OK
sarray<bool> test3 { new array<bool>(2) };//OK
}