将参数传递给构造函数

Passing parameter to a constructor

我在 C++ 中创建了一个 class vector,然后尝试在另一个名为 abc 的 class 中使用矢量对象。

我想要做的是在 class abc 中定义一个 vector

类型的对象

像这样:

#include <iostream>
using namespace std;


class vector{
public:
    double icomponent=1;
    double jcomponent=1;
    double kcomponent=1;

    vector(double conI, double conJ, double conK){   //constructor
         icomponent = conI;
         jcomponent = conJ;
         kcomponent = conK;
    }
};

class abc{
    double i,j,k;
    vector velocity(i,j,k); 
};

但是此代码无法编译并抛出此错误:

member "abc::i" is not a type name

我不明白是什么导致了这个问题。任何人都可以解决吗?

我尝试在网上搜索,但我能找到的最接近的是-,但那个是由一些头文件引用问题引起的,与这个无关。

你不能按照你定义的方式做你想做的事。本质上,您不能以这种方式将变量 ijk 传递给 velocity 的构造函数。你需要一个构造函数。示例:

class abc {
    double i, j, k;
    vector velocity;
public:
    abc( double i, double j, double k ) : i{i}, j{j}, k{k}, velocity{ i, j, k } {}
};

这使用 member initializer list 初始化三个双精度变量,以及 velocity 变量。

或者,正如 user17732522 在下面的评论中提到的,如果您的变量是 public,您可以稍作修改就可以执行您尝试的操作:

class abc {
public:
    double i, j, k;
    vector velocity = vector{ i, j, k };
};

为了使用此方法,您必须在构造对象期间初始化ijk(要么通过构造函数,或通过如下所示的聚合初始化),否则,您将在创建 velocity 对象时利用未初始化的变量获得未定义的行为。

int main()
{
    abc a{ 1, 2, 3 };
    std::cout << a.velocity.icomponent << '\n'; // print 1
    std::cout << a.velocity.jcomponent << '\n'; // print 2
    std::cout << a.velocity.kcomponent << '\n'; // print 3
}

您尝试使用 vector velocity( i, j, k ); 的问题是,C++ 编译器将其解释为一个名为 velocity 的函数,其中 returns 一个 vector,然后 ijk 应该是类型(当然它们不是)。