2015-01-10 108 views
0

我試圖創建一個十進制到二進制轉換器的輔助功能,它會告訴我的基礎上,2POW函數C++錯誤

這最高權力開始這一點是我的代碼:

int determineStart(int val){ 
    int topval = 1; 
    int i = 0; 
    for(i = 0; val > 2 * topval; ++i){ 
     topval = pow(2, i); 
    } 
    return topval; 
} 

我得到以下錯誤: main.cpp:9: error: call of overloaded pow(int, int&) is ambiguous

我試着切換周圍幾件事情(如在double或單獨的變量將作爲第二個參數有關pow(),使得topval a double等),但似乎無法讓它工作。

我在做什麼錯?

+0

在程序中還有其他'pow'定義?請發佈完整的程序 – bluefog

回答

2

獲得的兩個大國的最簡單,最快的方式正在發生變化 - 在CPU無論如何都是使用二進制的,所以它可以爲你添加一些額外的零。

因此,而不是pow(2, i)你會寫(1 << i)

1

這種參數類型沒有pow()函數。它可以是(float, int),(double, int)(long double, int)。如果你用(int, int)調用它,編譯器不知道上面哪些類型使用。最簡單的辦法是做:

pow(2.0, i) 

編輯: 我假設你使用標準pow()定義從<cmath><math.h>

+0

以及如何解釋[this](http://ideone.com/ndcIrY) – bluefog

+0

我使用Visual Studio 2010,並且出現錯誤:對重載函數的模糊調用。 – Avert

+1

@ShikharBhardwaj在C++ 11中增加了更多的重載。 –

1

鑄造可能是您的錯誤:您可以輕鬆地將int轉換爲double或float。 試試這個:

pow(2.0, i) 

它會像:

pow((double)(2), i)