我尝试使用以下命令声明PCL类的对象
typedef pcl::PointCloud<PointNT> PointCloudT; // in the .h file.
和
PointCloudT::Ptr object = new PointCloudT(); // in main func
PointCloudT::Ptr scene = new PointCloudT(); // and these two triggers the error of
初始化错误C2440:‘1>f:\cpps\pclrclass\pclrclass\main_routine
已提供复制构造函数。当使用它时,传递给参数的是完全相同的类型。尽管如此,编译器( gcc/g++ 4.8.2)似乎忽略了显式复制构造函数的存在。代码会生成编译错误。为什么?错误是:
t.cpp: In function ‘A f(const A&)’:
t.cpp:19:12: error: no matching function for call to ‘A::A(const A&)’
return a; //compilation error with gcc 4.8.2
^
t.cpp:19:12: note: candidate i
它为什么要编译呢?
struct UE{
UE(bool a = true) { };
// UE(){}; // if UE took no initial args and called below, gcc will complain.
};
class VA {
protected:
UE ue;
public:
VA();
};
VA::VA()
{
ue = new UE(true); // ???why???
// ue = new UE(); // will complain
}
我试过gcc
我刚刚创建了一个包含一个整型变量和一个指针变量的类。在创建它的对象之后,我将它传递给一个函数。即使在返回函数之后,程序也不会抛出异常
#include"iostream"
using namespace std;
class A
{
public :
int i;
char *c;
void show();
};
void func(A obj);
int main()
{
A a;
a.i = 10;
a.c = "string";
cout << " Befo
我有这个程序:
int main()
{
auto l([](){});
::std::cout << ::std::is_move_assignable<decltype(l)>{} << ::std::endl;
}
gcc-6.1.1显示0
clang-3.8.0显示1
这在我的程序中导致了编译错误。哪个编译器是正确的?
错误:
error: object of type '(lambda at t.cpp:5:5)' cannot be assigned because its copy assignment operato
我最近第一次用Visual检漏检测器分析了我的代码,它指示了向量中的泄漏,这是我没想到的。代码如下:
void func()
{
std::vector<MsgUnit> msgVec;
do
{
// msgVec.clear(); // do I need to do this to avoid a leak?
msgVec = m_obj->returnMsgUnitVector();
}
while (someConditionNotMet);
// process msgVec
我刚在大学里收到一个任务,就是写一个智能指针。我收到了一个框架,我需要实现所需的方法。如果我是对的,智能指针就是一种指针类型,它对给定对象(?)的引用号进行计数。如果计数器达到零,它将删除给定的对象。
这是骨架:
template<class T>
class my_pointer {
public:
my_pointer();
};
class refcounted {
/* the reference counted types should have the public interface that is defined here */
pu
我发现语法有编译错误。
std::shared_ptr<int> p = new int(5);
31 41 E:\temprory (delete it if u like)\1208.cpp [Error] conversion from 'int*' to non-scalar type 'std::shared_ptr<int>' requested
但这是可以的
std::shared_ptr<int> p(new int(5));
与unique_ptr相同;
但是我不知道为什么它是被禁止的。
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
#define MAX_WEIGHT 1000000
class Set
{
public:
int * parent;
int * height;
Set(int _n)
{
parent = new int[_n+1];
height = new int[_n+1];
我有一个没有复制构造函数或operator=重载的类。代码很大,但问题是围绕着这个伪代码:
ClassA object1(x,y);
object1.add(z)
myVector.push_back(object1);
//Now when I retrieve from myVector and do add it
// apparently creates another object
myVector.at(index).add(z1);
就像我说的,它是伪代码。我希望这对专家来说是有意义的!
因此,ClassA看起来像这样(当然不是所有的数据成员都包括在内)
Class Class
可能重复:
如果我不覆盖类的operator =,它将使用默认的成员分配。
但这意味着什么呢?
struct A {
int array[100];
};
A a;
A b=a;
没有错误。b如何处理a的array?通常array_b = array_a是无效的。
另一个例子是:
struct A {
vector<int> vec;
};
A a;
A b=a;
b如何处理a的vec?通过赋值(vec_b = vec_a)、构造函数(vec_b = vector<int>(vec_a))或其他神秘方式?
编辑:我必须使用unique_ptr或者遵循第五条规则,我还在学习它,所以我使用了unique_ptr,它起了作用。但是我有一个问题,这个析构函数现在被调用了两次,我认为只要指针所指向的内存块不被释放两次就没有问题,对吗?
我在c++中创建了一个简单的"String“类(从Cherno那里知道)。因此,我做了它,它似乎很好,直到我决定添加一个空的构造函数,以便能够在没有参数的情况下初始化它,但是当我这样做的时候,析构函数被调用了两次。
// here is the header file
#pragma once
#include <iostream>
using nam