2017-02-15 78 views
-4

我有這樣的功能:爲什麼我不能提領和cout ++這個字符串用C

void strPointerTest(const string* const pStr) 
{ 
    cout << pStr; 
} 

如果我這樣稱呼它:

string animals[] = {"cat", "dog"}; 
strPointerTest(animals); 

它返回的第一個元素的地址。所以我期待,如果我取消對它的引用,我會得到數組的第1個要素,但這樣做是這樣的:

void strPointerTest(const string* const pStr) 
{ 
    cout << *(pStr); 
} 

它甚至不會讓我編。我試過這個使用int而不是字符串,它的工作原理。有沒有什麼特別的字符串?我將如何檢索此函數中的字符串數組的元素?

編輯:

這裏有一個完整的例子,它不會在我結束編譯:

#include <iostream> 

void strPointerTest(const std::string* const pStr); 
void intPointerTest(const int* const pInt); 

int main() 
{ 
    std::string animals[] = { "cat", "dog" }; 
    strPointerTest(animals); 

    int numbers[] = { 9, 4 }; 
    intPointerTest(numbers); 
} 

void strPointerTest(const std::string* const pStr) 
{ 
    std::cout << *(pStr); 
} 

void intPointerTest(const int* const pInt) 
{ 
    std::cout << *(pInt); 
} 

我不知道爲什麼downvote。我在尋求幫助,因爲它不會在我的結尾編譯。如果它在你的目的下工作並不意味着它也適用於我。我在尋求幫助,因爲我不知道發生了什麼。

的編譯錯誤是:

No operator "<<" matches these operands - operand types are: std::ostream << const std::string 
+5

你會得到什麼編譯器錯誤? – NathanOliver

+3

請提供[mcve]。 – Barry

+1

如果我嘗試運行您提供的代碼 - [無法重現](http://ideone.com/7U1rYm)。 –

回答

5

在一些編譯器<iostream>恰好還包括<string>頭。在其他編譯器上,特別是微軟的編譯器,它顯然沒有。並且字符串的I/O操作符在<string>標頭中聲明。

這是你的責任,包括所有需要的標題,即使代碼有時碰巧無論如何工作。

所以解決方法是隻需添加

#include <string> 

在文件的頂部。

相關問題