这行代码在c ++中意味着什么?

时间:2017-06-17 14:55:40

标签: c++

我无法理解github源代码中的这行代码:

using NodePtr = std::shared_ptr<Node>;

我阅读了cppreference页面here,但它没有关于类似语法的任何信息。我可以猜测,有点像#define,因为从现在开始使用NodePtr时,它会在内部用std::shared_ptr<Node>替换它。有了这个,我试着测试代码,但它没有用。

代码:

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;
}

这是我得到的错误:

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 个答案:

答案 0 :(得分:2)

乍一看,您的错误是由命名空间引起的。 using语句位于名称空间nnvm中,而不是Graphy。

&#39;使用&#39;类似于&#39; typedef&#39;。它是一个允许&nbspvm :: NodePtr&#39;的别名。代表一个&#39; std :: shared_ptr&#39;。

<强>更新 正如@UnholySheep指出的那样,您还需要添加编译器设置以启用c ++ 11支持,因为编译器错误状态。

答案 1 :(得分:0)

您看到的错误消息表明您正在尝试使用默认为C ++ 98模式的旧编译器编译C ++ 11代码。您可能需要一个命令行开关,例如-std = c ++ 11(或类似的东西,具体取决于您正在使用的编译器)。或者获得一个新的编译器。