所以我为了我的目的遵循了这个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 = {
{wav, "wav"},
{mp3, "mp3"}
};
bool WAVFile::exportAudio(const char* filename, const char* filetype) {
// temporary test code
cout << audioType[wav] << endl;
return true;
}
// main.cpp
int main() {
file.exportAudio("export_i ran.wav","wav") ? cout << "Exported\n" : cout << "Failed\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如已经指出的那样,该错误的原因是 - 正如错误消息所解释的那样 - operator[]ofstd::map不是const合格的成员函数。(我对此有点惊讶,我以为有const超载)
一个可能的解决方法是使用成员 functionat,它具有这个 const 限定的重载,因此应该与const限定的std::maps一起工作。
另请注意,在您显示的代码中,可能存在问题:
class WAVFile {
static std::map<AudioTypes, const char*> audioType;
}
Run Code Online (Sandbox Code Playgroud)
和
static map<AudioTypes, const char*> audioType = {
{wav, "wav"},
{mp3, "mp3"}
};
Run Code Online (Sandbox Code Playgroud)
不是同一个变量。您应该在定义之前添加类范围并去掉static:
map<AudioTypes, const char*> WAVFile::audioType = {
{wav, "wav"},
{mp3, "mp3"}
};
Run Code Online (Sandbox Code Playgroud)
此外,您应该将 的定义移动enum AudioTypes到标题,或者可能提供前向声明。
| 归档时间: |
|
| 查看次数: |
11669 次 |
| 最近记录: |