2016-12-04 45 views
1
#include <iostream> 
#include <memory> 

std::unique_ptr<int[]> addElement(int *myNumbers, int sizeOfArray); 
void printArray(int * arr_ptr, int sizeOfArray); 

int main() 
{ 
    const int SIZE = 5; 
    int myNumbers[SIZE] = {18, 27, 3, 14, 95}; 

    std::unique_ptr<int[]> newCopy(new int[SIZE]); 
    newCopy = addElement(myNumbers, SIZE); 

    std::cout << "myNumbers: "; 
    printArray(myNumbers, SIZE); 

    std::cout << "newCopy: "; 
    printArray(newCopy, SIZE + 1); 


    return 0; 
} 

std::unique_ptr<int[]> addElement(int *myNumbers, int sizeOfArray) 
{ 
    std::unique_ptr<int[]> newArray(new int[sizeOfArray + 1]); 

    newArray[0] = 0; 
    for(int i = 0; i < sizeOfArray; i++) 
    { 
     newArray[i + 1] = myNumbers[i]; 
    } 

    return newArray; 
} 

void printArray(int * arr_ptr, int sizeOfArray) 
{ 
    for(int i = 0; i < sizeOfArray; i++) 
    { 
     std::cout << arr_ptr[i] << ' '; 
    } 

    std::cout << std::endl; 
} 

當試圖調用printArray(newCopy, SIZE + 1);我得到的編譯器錯誤cannot convert 'std::unique_ptr<int []>' to 'int*' for argument '1' to 'void printArray(int*, int)'傳遞的unique_ptr <int[]>的功能

我已經在這裏讀幾個類似的問題,但我似乎無法找到解決方案,經過int[]和該unique_ptr<int[]>printArray功能。


std::cout << "newCopy: "; 
for(int i = 0; i < SIZE + 1; i++) 
{ 
    std::cout << newCopy[i] << ' '; 
} 

請問我想

std::cout << "newCopy: "; 
printArray(newCopy, SIZE + 1); 

回答

1

當試圖調用printArray(newCopy, SIZE + 1);我得到的編譯器錯誤是什麼cannot convert 'std::unique_ptr<int []>' to 'int*' for argument '1' to 'void printArray(int*, int)'

這是因爲你嘗試通過std::unique_ptr<int []>對象成,而不是需要一個int*的功能。但是std::unique_ptr<int []>是不同的類型int*而不是隱式轉換。

解決方案:你應該傳遞一個int*代替。 std::unique_ptr只是裸指針的包裝。如果你看一看的std::unique_ptr的文檔,你會發現,它有一個成員函數std::unique_ptr::get

返回一個指向被管理對象

+0

謝謝 的http:// EN。 cppreference.com/w/cpp/memory/unique_ptr/get – Brandon