[英]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.