gpt4 book ai didi

c++ - vector 初始化的 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:48:45 27 4
gpt4 key购买 nike

关于一些无法编译的代码的一个非常快速的问题。我围绕 std::vector: 写了一个包装器:

template <class T>
class CLArray
{
public:
/// Constructor, destructor.
CLArray( const size_t size );
CLArray( const size_t size, const T value );
~CLArray();

/// Copy constructor and copy assignment operator.
CLArray( const CLArray& rhs );
CLArray& operator=( const CLArray& rhs );

/// Move constructor and move assignment operator.
CLArray( CLArray&& rhs );
CLArray& operator=( CLArray&& rhs );

void swap( CLArray& other )
{
std::swap( data_, other.data_ );
}

typedef typename std::vector<T>::iterator iterator;
typedef typename std::vector<T>::const_iterator const_iterator;

iterator begin()
{
return data_.begin();
}

const_iterator begin() const
{
return data_.begin();
}

iterator end()
{
return data_.end();
}

const_iterator end() const
{
return data_.end();
}

T& operator[]( const size_t index ) throw(CLException);
T operator[]( const size_t index ) const throw(CLException);

T At( const size_t index ) const throw(CLException);
void SetAt( const size_t index, const T& value ) throw(CLException);

void Insert( ubyte* data, const size_t size );

size_t GetSize() const;

const CLArray<T>& GetData() const;

void Clear();

private:
std::vector<T> data_;
};

我想创建一个类来管理二维 CLArray:

template <class T>
class SomeMap
{
public:
SomeMap( const size_t width, const size_t heigth, const T defaultVal = 0 )
: map_( width, CLArray<T>(heigth, defaultVal) )
{
// Allocate enough memory for all objects
}

~SomeMap() {}

private:
CLArray<CLArray<T>> map_;
//std::vector<std::vector<T>> map_;
};

我得到一个错误:no matching function for call to ‘CLArray<Cell*>::CLArray()声明对象时 SomeMap<Cell*> map( 748, 480, nullptr );我真的不明白为什么......`

最佳答案

CLArray没有默认构造函数,vector 的几种方法要求 T 是默认可构造的

当你实例化它时:

SomeMap<Cell*> map( 748, 480, nullptr );

SomeMap 有一个私有(private)成员:

CLArray<CLArray<T>> map_;

CLArray 存储 vector<T>对于您的私有(private)成员,T 是 CLArray。此 make 的 SomeMap 成员评估为 vector<CLArray<Case*>>vector要求包含的对象是默认可构造的。 CLArray没有默认构造函数。因此,您会在 vector 的代码中尝试实例化 T 时遇到编译器错误。

您可能希望 CLArray 应该有一个默认构造函数。但是,当您指定任何构造函数时,您将失去 C++ 默认为您提供的默认构造函数。 (参见 here)。

关于c++ - vector 初始化的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com