gpt4 book ai didi

c++ - 如何修复这些编译器错误?

转载 作者:太空狗 更新时间:2023-10-29 21:30:33 24 4
gpt4 key购买 nike

我有this我想编译的 2001 年的源代码。

它给出了这个:

$ make
g++ -O99 -Wall -DLINUX -pedantic -c -o audio.o audio.cpp
In file included from audio.cpp:7:
audio.h:14: error: use of enum ‘mad_flow’ without previous declaration
audio.h:15: error: use of enum ‘mad_flow’ without previous declaration
audio.h:17: error: use of enum ‘mad_flow’ without previous declaration
audio.cpp: In function ‘mad_flow audio::input(void*, mad_stream*)’:
audio.cpp:19: error: new declaration ‘mad_flow audio::input(void*, mad_stream*)’
audio.h:14: error: ambiguates old declaration ‘int audio::input(void*, mad_stream*)’
audio.h:11: error: ‘size_t audio::stream::BufferPos’ is private
audio.cpp:23: error: within this context
audio.h:11: error: ‘size_t audio::stream::BufferSize’ is private
audio.cpp:23: error: within this context
audio.h:10: error: ‘char* audio::stream::Buffer’ is private
audio.cpp:26: error: within this context
audio.h:11: error: ‘size_t audio::stream::BufferSize’ is private
audio.cpp:26: error: within this context
audio.h:11: error: ‘size_t audio::stream::BufferPos’ is private
audio.cpp:27: error: within this context
audio.h:11: error: ‘size_t audio::stream::BufferSize’ is private
audio.cpp:27: error: within this context
audio.cpp: In function ‘mad_flow audio::output(void*, const mad_header*, mad_pcm*)’:
audio.cpp:49: error: new declaration ‘mad_flow audio::output(void*, const mad_header*, mad_pcm*)’
audio.h:15: error: ambiguates old declaration ‘int audio::output(void*, const mad_header*, mad_pcm*)’
audio.cpp: In function ‘mad_flow audio::error(void*, mad_stream*, mad_frame*)’:
audio.cpp:83: error: new declaration ‘mad_flow audio::error(void*, mad_stream*, mad_frame*)’
audio.h:17: error: ambiguates old declaration ‘int audio::error(void*, mad_stream*, mad_frame*)’
audio.cpp: In constructor ‘audio::stream::stream(const char*)’:
audio.cpp:119: error: ‘input’ was not declared in this scope
audio.cpp:122: error: ‘output’ was not declared in this scope
audio.cpp:123: error: ‘error’ was not declared in this scope
make: *** [audio.o] Error 1

audio.h包含

#ifndef _AUDIO_H_
#define _AUDIO_H_

#include <stdlib.h>
#include "mad.h"

namespace audio {
class stream {
private:
char* Buffer;
size_t BufferSize, BufferPos;
struct mad_decoder Decoder;

friend enum mad_flow input(void* Data, struct mad_stream* MadStream);
friend enum mad_flow output(void* Data, const struct mad_header* Header,
struct mad_pcm* PCM);
friend enum mad_flow error(void* Data, struct mad_stream* MadStream,
struct mad_frame* Frame);

public:
stream(const char* FileName);
~stream();

void play();
};
}

#endif

更新:

问题似乎是无法看到 mad_flow。如果我查看 mad.h,则那里声明了 mad_flow

如果我只是复制/粘贴

  enum mad_flow {
MAD_FLOW_CONTINUE = 0x0000,
MAD_FLOW_STOP = 0x0010,
MAD_FLOW_BREAK = 0x0011,
MAD_FLOW_IGNORE = 0x0020
};

mad.h 开始,错误消失(并出现新错误)。

那么如何使 mad_flow 可用?

最佳答案

关于:

I have tried to just insert

enum mad_flow {};

...mad_flow 类型的正确前向声明将是:

enum mad_flow ;

但是您真的应该问自己为什么声明或定义还不可见,因为前向声明可能有点困惑。是否包含所有必要的 header ?

[---编辑---]

为了回应 Johannes Schaub 的评论,这里有一个前向声明枚举的可编译示例:

enum mad_flow ;             // forward declaration

void f( mad_flow& arg ) ; // forward declaration of function
// using incomplete type

int main()
{
mad_flow x ; // Declaration using incomplete type

f( x ) ; // Function call using incomplete enum object
}

enum mad_flow // Completion of the definition
{
VALUE1,
VALUE2
} ;

void f( mad_flow& arg )
{
arg = VALUE1 ; // Use of value from complete definition
}

关于c++ - 如何修复这些编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com