2016-09-18 6 views
-1

neu in C++ - Codierung und versuchte, eine Hand von eindeutigen Zeigern zu bekommen. Ich laufe in 3 FehlerC++ Syntax- und Compiler-Fehler - keine Übereinstimmung für Operator <<

1.cpp|14|error: no match for 'operator<<' 

2.cannot bind 'std::basic_ostream<char>' lvalue to std::basic_ostream<char>&& 
#include <iostream> 
    #include <memory> 


using std::cout; 
using std::cin; 
using std::endl; 

using std::make_unique; 

int main(){ 

auto ptr = make_unique<int>(4); 

cout << "The value of ptr: " << ptr << endl; 

cout << "The value of ptr: " << &ptr; 

} 
+1

Sie dereferenzieren müssen 'ptr':' cout << "Der Wert von ptr:" << * ptr << endl; ' – ildjarn

Antwort

1

ptr ist std::unique_ptr<int>, und Sie haben keine Definition von operator <<(std::ostream&, std::unique_ptr<int>), deshalb erhalten Sie einen Fehler beim Kompilieren Ihres Codes.

Die unique_ptr ist nur ein Wrapper um einen rohen Zeiger. Um den tatsächlichen Zeiger (den umschlossenen) zu erhalten, rufen Sie einfach get() an, in diesem Fall wird eine int* zurückgegeben, und Sie können es drucken, ohne irgendeine andere Funktion zu definieren oder irgendeinen Operator zu überladen. Um den Wert, auf den ptr zeigt, zu ermitteln, wird der Zeiger einfach wie normaler Zeiger dereferenziert.

#include <iostream> 
#include <memory> 

int main() { 
    auto ptr = std::make_unique<int>(4); 
    std::cout << "The value ptr is pointing: " << *ptr << '\n' // Dereference the pointer 
     << "The value of ptr: " << ptr.get() << std::endl; // Get the actual pointer 
    return 0; 
} 
0

Es gibt viele Syntaxfehler in diesem Code so unten ist richtig Programm, das Sie versuchen können:

#include <iostream> 
#include <memory> 
int main() 
{ 


using std::cout; using std::cin; using std::endl; 

using std::make_unique; 

auto ptr = make_unique<int>(4); 

//there is no overload of ostream operator for std::unique_ptr 
//so you can't directly do << ptr 
cout << "The value of ptr: " << *ptr << endl; 
//& will print address not value 
cout << "The Address of ptr: " << &ptr; 


} 
+0

Hinzufügen von Erklärungen wäre besser. – songyuanyao

+0

'cout <<" Die Adresse von ptr: "<< &ptr;' gibt die Adresse des 'unique_ptr' aus, nicht das' int', auf das der 'unique_ptr' zeigt. Sie wollen 'ptr.get()' – user4581301

Verwandte Themen