2017-06-17 4 views
-5

Ich kann diese Codezeile aus dem Quellcode auf Github verstehen:Was bedeutet diese Codezeile in C++?

using NodePtr = std::shared_ptr<Node>; 

ich die cppreference Seite here, lesen, aber es hat keine Informationen über ähnliche Syntax. So viel wie ich erraten kann, ist es etwa wie #define in dem, wenn ich von jetzt an NodePtr verwende, wird es es intern mit std::shared_ptr<Node> ersetzen. Damit habe ich versucht, Code zu testen, aber es hat nicht funktioniert.

Code:

test.h:

#ifndef TEST_H_ 
#define TEST_H_ 

#include <memory> 
#include <string> 
#include <vector> 
#include <unordered_map> 
#include <utility> 
#include <typeinfo> 
#include <limits> 
#include <functional> 


namespace nnvm { 
class Node; 


using NodePtr = std::shared_ptr<Node>; 


class Node { 
public: 

    ~Node(); 

    inline bool is_variable() const; 
    inline int num_outputs() const; 
    inline int num_inputs() const; 

}; 

} 

#endif // TEST_H_ 

test.cpp:

#include "test.h" 
#include <iostream> 


static graphy::NodePtr Create(); 

int main(int argc, char const *argv[]) 
{ 
    /* code */ 

    graphy::Node *node = new graphy::Node(); 
    std::cout << "Hello Graphy!!" << std::endl; 
    return 0; 
} 

Hier ist der Fehler, den ich bekommen:

In file included from /usr/include/c++/5/unordered_map:35:0, 
       from test.h:7, 
       from test.cpp:1: 
/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 
#error This file requires compiler and library support \ 
^
In file included from test.cpp:1:0: 
test.h:18:7: error: expected nested-name-specifier before ‘NodePtr’ 
using NodePtr = std::shared_ptr<Node>; 
    ^
test.cpp:5:14: error: ‘NodePtr’ in namespace ‘graphy’ does not name a type 
static graphy::NodePtr Create(); 
      ^
+2

Natürlich hat es. Es ist der [dritte Link am Ende] (http://en.cppreference.com/w/cpp/language/type_alias). – Rakete1111

+4

Es ist ein Alias. Sie können 'NodePtr' anstelle von' std :: shared_ptr 'in Ihrem Code verwenden. – Azeem

+4

Lesen Sie die erste Fehlermeldung und tun Sie, was sie sagt. – molbdnilo

Antwort

2

Auf den ersten Blick yo Ihr Fehler ist auf Namespaces zurückzuführen. Die using-Anweisung befindet sich im Namespace nnvm und nicht in Graphy.

'using' ist ähnlich wie 'typedef'. Es ist ein Alias, der 'nnvm :: NodePtr' erlaubt, ein 'std :: shared_ptr' darzustellen.

Update Wie @UnholySheep darauf hinweist, finden Sie auch einen Compiler hinzufügen müssen Einstellung C++ 11-Unterstützung, wie die Compiler-Fehlerzuständen zu ermöglichen.

+2

* "# Fehler Diese Datei erfordert Compiler und Bibliotheksunterstützung für den ISO C++ 2011 Standard." * - Das ist der erste Fehler, es hat nichts mit Namespaces zu tun – UnholySheep

+0

@ UnholySheep Ah, ja. Ich habe mit dem ersten Fehler aufgehört, den ich bemerkt habe. Aber du hast Recht. Es gibt mehr als einen Fehler hier. –

0

Die Fehlermeldungen, die Sie sehen, deuten darauf hin, dass Sie versuchen, C++ 11-Code mit einem alten Compiler zu kompilieren, der standardmäßig den C++ 98-Modus verwendet. Sie benötigen wahrscheinlich einen Befehlszeilenschalter, etwas wie -std = C++ 11 (oder etwas Ähnliches, abhängig davon, welchen Compiler Sie gerade verwenden). Oder hol dir einen neuen Compiler.