小编Uri*_*Raz的帖子

具有initializer_list和size的std :: unordered_map构造函数在main中进行编译,但在类定义中未进行编译

我正在尝试std::unordered_map使用构造函数初始化一个构造函数,该构造函数通过初始化列表和初始存储桶数量接受数据。

出于某种原因,如果将其放入main,则该构造函数会起作用,但是将其放入类标头时会出现语法错误。

具体来说,标题为momo.h

#pragma once
#include <unordered_map>

namespace std 
{
   template <>
   struct hash<std::pair<uint16_t, uint16_t>>
   {
      std::size_t operator()(const std::pair<uint16_t, uint16_t>& k) const
      {
         return (std::hash<long>()((((long)k.first) << 16) + (long)k.second));
      }
   };
}

class test
{
   std::unordered_map<std::pair<uint16_t, uint16_t>, uint16_t> m_Z(
      { /* Fails here: syntax error: missing ')' before '{' */
          {std::pair{ 1, 2 }, 3},
          {std::pair{ 4, 5 }, 6}
      }, 128);

};
Run Code Online (Sandbox Code Playgroud)

而如果我将标头中的定义删除为main

#include "Momo.h"

int main()
{
   test X;

   std::unordered_map<std::pair<uint16_t, …
Run Code Online (Sandbox Code Playgroud)

c++ constructor unordered-map c++11 list-initialization

4
推荐指数
1
解决办法
85
查看次数

C如何解析a = b --- c?

如果C必须编译以下代码

int a = 5, b = 3, c = 7;

a = b---c;
Run Code Online (Sandbox Code Playgroud)

难道要分析它a = b-- - ca = b - --c或者是不确定的行为?

c parsing operators token c-preprocessor

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

为什么Java基类构造函数调用派生类的方法?

我有一个派生的Java类重写基类的方法。当基类调用该方法时,它将执行派生类的功能,而不是其自身的功能。为什么?

public class HelloWorld{

    public static void main(String []args){
        Derived d = new Derived();
        System.out.println("Main");
    }
}

class Base {
    void f() {
        System.out.println("Base::f()");
    }

    public Base() {
        f();
    }
}

class Derived extends Base {
    void f() {
        System.out.println("Derived::f()");
    }

    public Derived() {
        f();
    }
}
Run Code Online (Sandbox Code Playgroud)

代码打印两次Derived :: f(),我希望它先打印Base :: f(),再打印Derived :: f(),就像在C ++中那样

java inheritance

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