[英]Passing parameter to a constructor
我在 C++ 中创建了一个 class vector
,然后尝试在另一个名为abc
的 class 中使用向量 object 。
我想要做的是在 class abc
中定义一个vector
类型的 object
像这样:
#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
我不明白是什么导致了这个问题。 任何人都可以弄清楚吗?
我尝试在线搜索,但我能找到的最接近的是 - 这个,但那个是由一些 header 文件引用问题引起的,与这个无关。
你不能按照你定义的方式做你想做的事。 本质上,您不能以这种方式将变量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 } {}
};
这使用成员初始化器列表来初始化三个双变量,以及velocity
变量。
或者,正如 user17732522 在下面的评论中提到的那样,如果您的变量是公开的,您可以通过稍作修改来执行您正在尝试的操作:
class abc {
public:
double i, j, k;
vector velocity = vector{ i, j, k };
};
为了使用这个方法,你必须在 object 的构造过程中初始化i
, j
和k
(通过构造函数,或者通过如下所示的聚合初始化),否则,你将通过在创建velocity
object。
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
的 function ,它返回一个vector
,然后i
, j
和k
应该是类型(当然它们不是)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.