将参数传递给构造函数
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
我不明白是什么导致了这个问题。任何人都可以解决吗?
我尝试在网上搜索,但我能找到的最接近的是-,但那个是由一些头文件引用问题引起的,与这个无关。
你不能按照你定义的方式做你想做的事。本质上,您不能以这种方式将变量 i
、j
和 k
传递给 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 };
};
为了使用此方法,您必须在构造对象期间初始化i
、j
和k
(要么通过构造函数,或通过如下所示的聚合初始化),否则,您将在创建 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
,然后 i
、j
和 k
应该是类型(当然它们不是)。
我在 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
我不明白是什么导致了这个问题。任何人都可以解决吗?
我尝试在网上搜索,但我能找到的最接近的是-
你不能按照你定义的方式做你想做的事。本质上,您不能以这种方式将变量 i
、j
和 k
传递给 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 };
};
为了使用此方法,您必须在构造对象期间初始化i
、j
和k
(要么通过构造函数,或通过如下所示的聚合初始化),否则,您将在创建 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
,然后 i
、j
和 k
应该是类型(当然它们不是)。