相关疑难解决方法(0)

在'...'标记之前预期的primary-expression调用模板化类的模板化方法

我在模板化的类中有一个模板化的静态方法,我从模板化的函数中调用它.编译因错误而失败error: expected primary-expression before '...' token.

这是一个示例代码.它有一些未使用的模板参数,但与我的实际代码完全相同,其中这些参数很重要.

temp late<typename T>
class Run {
public:
    template<typename ...Args>
    static void run(Args... args) {}
};

template <typename T, typename ...Args>
void
run2(Args ...args)
{
    Run<int>::run<Args...>(args...);   // OK
    Run<T>::run<Args...>(args...);     // Fail on first . in Args...
}

int main() {
    run2<int>(1, 2, 3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

%  g++ -std=gnu++11 -o try try.cc
try.cc: In function 'void run2(Args ...)':
try.cc:13:21: error: expected primary-expression before '...' token
     Run<T>::run<Args...>(args...);     // Fail on first . …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

0
推荐指数
1
解决办法
60
查看次数

在 C++ 中从外部访问嵌套类

您好,我想从其他类访问嵌套类。

class OutSideClass
{
public:
    class InSideClass
    {
       ...
    };
    friend class InSideClass;
};

class Other
{
    InSideClass x; // This doesn't work
};
Run Code Online (Sandbox Code Playgroud)

InSideClass 类是一个公共类,所以我不明白为什么我可以从外部访问它

我也想访问

template <typename T>
class OutSideClass
{
public:
    class InSideClass
    {
        class InSideClassIterator
        {

        };
    };


public:
    class Other
    {
    OutSideClass<T>::InSideClass::InSideClassIterator x;
    };


};
Run Code Online (Sandbox Code Playgroud)

c++ nested class inner-classes

0
推荐指数
1
解决办法
48
查看次数

为什么我的地图迭代器中出现语法错误?

我写了一个模板函数来翻转std::map键和值。

#include <map>
#include <iterator>

template <typename A, typename B>
std::map<B, A> flip_map(std::map<A, B> &src)
{
    std::map<B, A> dst;
    for (std::map<A, B>::iterator it = src.begin(); it != src.end(); ++it)
    {
        dst.insert(std::pair<B, A>(it->second, it->first));
    }
    return dst;
}
Run Code Online (Sandbox Code Playgroud)

VS给了我一个语法错误:

意外的令牌“标识符”,预期为“;”

我不知道我在做什么错。

c++

-1
推荐指数
1
解决办法
62
查看次数

如何从成员函数返回迭代器?

可能重复:
我必须在何处以及为何要使用"template"和"typename"关键字?

我有一个类似下面的模板类

  template <class Key, class Object>
  class  TObjectRegistery
  {
  public:
     typedef map<const Key,  Object*> ObjectMap;

     void AddObject(Object *obj){
        objectMap_[obj.code()] = obj;
     }
  private:
     ObjectMap  objectMap_;
     }
Run Code Online (Sandbox Code Playgroud)

我想在外面运行迭代TFactory,然后我想在类中添加两个成员函数.

  ObjectMap::iterator xbegin(){
     return objectMap_.begin();
  }
Run Code Online (Sandbox Code Playgroud)

但是我得到了一个我错过的错误; 在xbegin之前,像undefine ObjectMap :: iterator

  "missing ';' before identifier 'xbegin'"
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我该怎么办呢?如果这种好方法可以在课外进行迭代?

c++ stl

-3
推荐指数
1
解决办法
151
查看次数

标签 统计

c++ ×4

c++11 ×1

class ×1

inner-classes ×1

nested ×1

stl ×1

templates ×1