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);//确定 ... };

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/秒

错误:

/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/秒]构建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      
}