簡體   English   中英

將參數傳遞給構造函數

[英]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 文件引用問題引起的,與這個無關。

你不能按照你定義的方式做你想做的事。 本質上,您不能以這種方式將變量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 } {}
};

這使用成員初始化器列表來初始化三個雙變量,以及velocity變量。

或者,正如 user17732522 在下面的評論中提到的那樣,如果您的變量是公開的,您可以通過稍作修改來執行您正在嘗試的操作:

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

為了使用這個方法,你必須在 object 的構造過程中初始化ijk (通過構造函數,或者通過如下所示的聚合初始化),否則,你將通過在創建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 ,然后ijk應該是類型(當然它們不是)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM