相关疑难解决方法(0)

如何解决类型“std::map<AudioTypes, const char *>”的“无可行重载运算符[]”问题?

所以我为了我的目的遵循了这个SO 答案,我真的不知道如何解决这个错误。当我尝试访问audioType[wav]or 时audioType[mp3],出现以下错误。查找互联网对我没有帮助。

error: no viable overloaded operator[] for type 'const std::map<AudioTypes, const char *>

note: candidate function not viable: 'this' argument has type 'const std::map<AudioTypes, const char *>', but method is not marked const mapped_type& operator[](const key_type& __k);

// WAVFile.h
class WAVFile {
    // ...
    private:
        enum AudioTypes: int;
        static std::map<AudioTypes, const char*> audioType;
    // ...
}

// WAVFile.cpp
enum AudioTypes: int {
    wav,
    mp3
};

static map<AudioTypes, const char*> audioType = { …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

哪里需要(不需要)完整的类型?

我最近惊讶地发现这段代码可以编译(至少在 gcc 和 MSVC++ 上):

template<typename T>
class A {
public:
    T getT() { return T(); }
};

class B : public A<B> { };
Run Code Online (Sandbox Code Playgroud)

当这没有发生时:

class A;

class B : public A { };

class A {
public:
    B getB() { return B(); }
};
Run Code Online (Sandbox Code Playgroud)

对我来说,模板类可以采用不完整的类型作为模板参数,并且有一个函数通过调用其构造函数返回一个类型,并且仍然可以编译,这对我来说似乎很奇怪。那么到底哪里需要完整的类型(或者如果列表更短,哪里不需要它们)?

c++ incomplete-type

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

解决循环依赖 - C

我检查了SO的重复,但无法找到我的问题的确切解决方案.

我有一个头文件NvCommon.h,我使用枚举NV_DATA_TYPE.这个枚举在另一个标题NvDefs.h中定义,我在其中使用了许多结构和枚举NvCommon.h.由于循环依赖,我无法构建它.我知道转发声明枚举是不可能的.

在这种情况下可以做些什么?这是我设计的问题吗?我是否必须引入另一个头文件来解决这个问题?

我不是C专家.请帮我.我的设计可能有问题,我知道可以通过引入另一个头文件来修复此循环依赖.我想知道的是"这是唯一的方法".寻找备用解决方案(如果有).

如果它有用,我会发布完整的代码.

c

3
推荐指数
2
解决办法
7287
查看次数

我的私有方法如何在C++中访问公共枚举?

我想知道如何或者如果我可以在以下类中enum payloadTypes使用我的私有方法访问我的公共threshold():

class A {

private: 
    unsigned int  threshold(payloadTypes kindOfPayload,int x,int y);

public:
 enum payloadTypes {
  INVALID =-1,
  TEST=0,
  THRESHOLDS,
  RX,
 };

}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我会收到此错误,并且我不想将我的枚举范围更改为 private

错误:'payloadTypes'尚未声明

unsigned int threshold(payloadTypes kindOfPayload,int x,int y);

c++ oop enums class function

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

如何检测枚举是否已定义

假设我有以下代码:

// exposition-only, I can't use this macro in my solution
#if defined(HAS_MY_ENUM)
enum my_enum {
    zero,
    one,
};
#endif

enum empty {
    placeholder, // an enum must always have a value
};
Run Code Online (Sandbox Code Playgroud)

我希望有一个条件类型别名my_enum_or_empty,如果已定义,则设置为my_enum,否则设置为empty,例如:

using my_enum_or_empty = std::conditional<my_enum_exists, my_enum, empty>;
Run Code Online (Sandbox Code Playgroud)

我想要一个基于 SFINAE 的解决方案,它可以为我提供my_enum_exists.

我正在考虑这种方法,但它需要 的​​前向声明my_enum,并且不能前向声明,因为它是无大小的。我无法添加尺寸,因为它enum来自外部库。你有什么想法?

限制

我的用例是,这my_enum是在我无法控制的外部 C 库中定义的。我需要针对该库的两个版本(带my_enum和不带)编译我的代码。定义的标头源my_enum不能更改,即它必须是旧的 C 样式enum

编译时不知道库版本。可惜没有LIBRARY_VERSION宏。我只需要依靠这一点 …

c++ enums metaprogramming sfinae

3
推荐指数
2
解决办法
412
查看次数

C++枚举在一个类中 - 声明顺序很重要?

我正在使用visual studio 2010,并且不能完全搞定,这个类怎么错(语法错误:标识符'EnumType')并且不会编译:

class BrokenClassWithEnum
{
private:
    void useEnum (EnumType enumType); //syntax error : identifier 'EnumType '
public:
    enum EnumType 
    {
        VAL1,
        VAL2,
        VAL3
    };
}
Run Code Online (Sandbox Code Playgroud)

这没关系:

class WorkingClassWithEnum
{
public:
    enum EnumType 
    {
        VAL1,
        VAL2,
        VAL3
    };
private:
    void useEnum (EnumType enumType);
}
Run Code Online (Sandbox Code Playgroud)

班级范围发生了什么变化?

c++ visual-studio-2010

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

包含标题的枚举| 错误未声明

Maumau_game.h:

#ifndef MAUMAU_GAME_H_
#define MAUMAU_GAME_H_

#include <more_includes>
#include "Player.h"

enum game_status {
    STATUS_NONE = 0,
    STATUS_DRAW_2 = 1,
};

class Maumaugame_holder {
methods();
};

#endif /* MAUMAU_GAME_H_ */
Run Code Online (Sandbox Code Playgroud)

Player.h:

#ifndef PLAYER_H_
#define PLAYER_H_

#include <vector>
#include "Maumau_game.h"
#include "Card.h"

class Player {
more_methods();

public:
    void do_turn(game_status g_status, const Card upper_dropped_card,
            Deck& talon); //Error: >>game_status<< not declared 


};

#endif /* PLAYER_H_ */
Run Code Online (Sandbox Code Playgroud)

我不知道为什么没有声明枚举game_status.我已正确包含标题,它在范围内,不是吗?我无法在"Player.h"中声明枚举.我会宣布它两次.你能帮我吗?你有什么建议吗?

(我不允许使用C++ 11)

提前致谢

c++ enums declaration

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

编译器找不到枚举中的成员,枚举在单独的头文件中声明,并在源文件中定义

我对编程非常陌生,正在使用 C++。

在我的头文件:Globals.h 中,我声明了我的枚举“Colour”和一个用于测试它的函数。

在我的源文件 Globals.cpp 中,我定义了枚举和测试函数。

在 main 中,我调用该函数,但收到以下消息:

错误 C2027:使用未定义的类型“颜色”

错误 C2065:“COLOUR_BLACK”:未声明的标识符。

我的代码如下:

Globals.h

#ifndef GlOBALS_H
#define GLOBALS_H

enum class Colour;
void print_Colour(Colour whatColour);

#endif 
Run Code Online (Sandbox Code Playgroud)

和:

Globals.cpp

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


enum class Colour
{
    COLOUR_BLACK,
    COLOUR_BROWN,
    COLOUR_BLUE,
    COLOUR_GREEN,
    COLOUR_RED,
    COLOUR_YELLOW
};

void print_Colour(Colour whatColour)
{
    switch (whatColour)
    {
    case Colour::COLOUR_BLACK:
        std::cout << "Black" << "\n";
        break;
    case Colour::COLOUR_BROWN:
        std::cout << "Brown" << "\n";
        break;
    case Colour::COLOUR_BLUE:
        std::cout << "Blue" << "\n";
        break;
    case Colour::COLOUR_GREEN:
        std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ enums

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