簡體   English   中英

為什么我不能在 C++ 中的特定函數重載中調用同一函數的任何其他重載?

[英]Why can't I call any other overloads of the same function while inside a particular function overload in C++?

最好用一個簡單的程序來說明這個問題。

#include <iostream>
#include <utility>

void printPoint(std::pair <int, int> point) {
    printPoint(point.first, point.second);
}

void printPoint(int x, int y) {
    std::cout << x << ' ' << y << std::endl;
}

int main(void) {
    std::pair <int, int> point(2, 3);
    printPoint(point);
    return 0;
}

我希望兩個printPoint函數利用重載來完成同樣的事情。 但是,雖然在printPoint函數的特定重載范圍內(在本例中為單參數重載),編譯器只允許我使用該特定重載,因此代碼不會編譯。

為什么是這樣? 此外,有沒有辦法緩解這個問題,這樣我就不必兩次重寫相同的函數體?

聲明順序在這里很重要。

在第一個重載( printPoint(int, int) printPoint(std::pair <int, int> ) 之前移動第二個重載 ( printPoint(int, int) );否則它在第一個重載內不可見。即

void printPoint(int x, int y) {
    std::cout << x << ' ' << y << std::endl;
}

void printPoint(std::pair <int, int> point) {
    printPoint(point.first, point.second);
}

居住

暫無
暫無

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

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