簡體   English   中英

C ++傳遞與另一個類型相同的類型

[英]C++ passing a type that's identical to another type

有人可以回答這個問題嗎?

以下代碼比我的尷尬問題更好地突出了該問題。

struct vector2d
{
    float x,y;
};

struct point2d
{
    float x, y;
}

void drawpoint(point2d point);

int main()
{
    vector2d vec = {100, 100};
    drawpoint(vec);
}

void drawpoint(point2d point)
{
    ...
}    

我想知道為什么這不起作用。 另一種選擇是通過一個中間堆point2d變量手動轉換類型,但是編譯器會看到這一點並知道這不是必需的嗎?

在此,我可能錯過了一件非常簡單的事情,謝謝。

編譯器不會通過隨意轉換類型來幫助您。 假設您有一個具有float寬度和高度的Rectangle類,以及一個具有float高度和權重的PatientInformation類。 如果傳遞了錯誤的類型,您是否真的希望編譯器進行無形的轉換?

請注意,以下代碼可以正常運行:

int main()
{
    vector2d vec = {100, 100};
    drawpoint(reinterpret_cast<point2d const&>(vec));
}

盡管如此,這里合適的解決方案是只是使用類型更干凈。 它沒有意義的載體來傳遞給drawpoint ,任何比它將使意義的點要傳遞給moveBy 考慮類型,而不是成員。

point2d pnt;
memcpy(&pnt, &vec, sizeof(pnt));
drawpoint(pnt);

要么

point2d pnt = { vec.x, vec.y };
drawpoint(pnt);

要么

drawpoint(point2d{vec.x, vec.y});

要么

drawpoint(*(const point2d*)&vec); // UB, but will work on many implementations

您不能,您必須執行以下操作:

void main
{
vector2d vec = {100, 100};

point2d p;
p.x = vec.x;
p.y = vec.y;

Drawpoint(p);

}

您有一堆小的語法問題,是否嘗試過編譯。

  Struct, Void, and Float  

不應該大寫

  Void main

應該是int main()

但最重要的是,您已定義Drawpoint()以將Vector2D用作參數,並試圖將其傳遞給point2d。 C ++是類型安全的,不會讓您僅將一種類型替換為另一種類型。

您可以創建一個基類:

struct XY{
  float x;
  float y;
};

然后

struct vector2D: XY{
};

struct point2D: XY{
};

void drawPoint(XY& xy){
}

暫無
暫無

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

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