c++ - (C++)用于实例化新对象并将其分配给指向相同对象类型的二维指针 vector 的语法?

标签 c++ class pointers vector 2d

如果这个问题已经被问到,我深表歉意,但我看到的其他答案让我感到困惑。我有一个类,我想用它来构建另一种对象的二维矩阵。我正在尝试编写一种方法来创建新对象,并将 2D vector 中的指针分配给新对象,但我似乎无法获得正确的语法。

我像这样创建一个 2D vector :

std::vector<std::vector<CSinusoid*>> *m_SineMatrix; //2D Vector of pointers to CSinusoid objects

然后我尝试按照这些思路创建一个方法:

void CWaveMatrix::Init_SineMatrix(int x, int y)
{
    m_SineMatrix[x][y] = new CSinusoid(); 
}

函数内的代码行是我遇到问题的地方。我不知道如何告诉 2D vector 中的特定指针指向新对象。

请注意, vector 和方法都是同一类的私有(private)成员。

最佳答案

我觉得你的问题其实出在这里:

std::vector<std::vector<CSinusoid*>> *m_SineMatrix

m_SineMatrix 不是 CSinusoid 指针的二维 vector ...它是指向此类 vector 的指针。 C++ [] 运算符对原始指针和 vector 都起作用。因此,函数中的代码将调用指针上的 [x] 运算符并将结果视为二维 vector ,然后调用二维 vector 上的 [y] 运算符并将结果视为一维 vector 。它不知道如何将 CSinusoid* 分配给 CSinusoid* 的 vector ,所以它会提示。

要解决此问题,您可以将 *m_SineMatrix 更改为 m_SineMatrix,或者将函数更改为执行 (*m_SineMatrix)[x][y]。

关于c++ - (C++)用于实例化新对象并将其分配给指向相同对象类型的二维指针 vector 的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775254/

相关文章:

c++ - double[][] 不等于 **double 吗?

c - 如何在程序中指针输出?

c++ - C++中奇怪的天花板错误

c# - 列表 - 如何通过引用查找项目?

c++ - 从 C++ 的图像流中创建 Qml 视频

java - 我们可以使用反射来获取类的静态成员而不在对象实例上调用该方法吗?

c++ - 特定数据类型的模板类

c - gcc 版本 4.6.3 上的 c 程序汇编版本

c++ - 如何使用 -std=c++17(可选、任意、string_view、变体)在 g++ 6.2.0 中包含 C++ 17 header

c++ - Qt布局不工作