ошибка C2146: синтаксическая ошибка: отсутствует ‘;’ перед идентификатором «ContextRecord»

у меня есть файл заголовка, который содержал все функции класса, включая код, поэтому у класса не было файла cpp. все работало. Я добавил файл cpp и переместил код функции туда, и теперь я получаю эту ошибку при компиляции. заголовок, в котором я получаю сообщение об ошибке в ((x86) \ microsoft sdks \ windows \ v7.0a \ include \ winnt.h (6361)), даже не включен в изменяемый файл. Кто-нибудь знает, в чем причина? Я могу предоставить код, я просто не знаю, что было бы полезно.

файл cpp:

#include "Fisherman.h"
void Fisherman::Initialise(){

memset((void*)&mListener, 0, sizeof(X3DAUDIO_LISTENER));
memset((void*)&mEmitter, 0, sizeof(X3DAUDIO_EMITTER));
memset((void*)&mDSPSettings, 0, sizeof(X3DAUDIO_DSP_SETTINGS));

XAUDIO2_VOICE_DETAILS details;
mCastSplash->GetSourceVoice()->GetVoiceDetails(&details);
mEmitter.ChannelCount = details.InputChannels;
mEmitter.CurveDistanceScaler = 1.0f;
X3DAUDIO_VECTOR emitterPos = { 0.0f, 0.0f, 0.0f};
mEmitter.Position = emitterPos;
X3DAUDIO_VECTOR emitterVel = { 0.0f, 0.0f, 0.0f };
mEmitter.Velocity = emitterVel;

mDSPSettings.SrcChannelCount = mEmitter.ChannelCount;
mDSPSettings.DstChannelCount = mXACore->GetChannelCount();

FLOAT32 * matrix = new FLOAT32[mDSPSettings.SrcChannelCount * mDSPSettings.DstChannelCount];

mDSPSettings.pMatrixCoefficients = matrix;

X3DAUDIO_VECTOR front = { 0.0f, 0.0f, 1.0f };
X3DAUDIO_VECTOR top = { 0.0f, 1.0f, 0.0f };
mListener.OrientFront = front;
mListener.OrientTop = top;
X3DAUDIO_VECTOR listenerVel = {0.0f, 0.0f, 0.0f};
mListener.Velocity = listenerVel;
X3DAUDIO_VECTOR listenerPos = { 0.0f, 0.0f, 0.0f };
mListener.Position = listenerPos;
}

void Fisherman::Rotate (int MouseDeltaX){
X3DAUDIO_VECTOR input = mListener.OrientFront;
X3DAUDIO_VECTOR result;
float theta = -(X3DAUDIO_PI/1000)*MouseDeltaX;

float cs = cos(theta);
float sn = sin(theta);

if(cs < 0.00001) cs = 0.0f;

result.x = input.x * cs - input.z * sn;
result.z = input.x * sn + input.z * cs;
result.y = 0.0f;

mListener.OrientFront = result;

}

bool Fisherman::Cast(Fish* aFish){
mCast->Play(0);
mCastOut = true;
mFish = aFish;

X3DAUDIO_VECTOR seg_v = Multiply(mListener.OrientFront, 30);

X3DAUDIO_VECTOR pt_v = {mFish->GetX(), 0.0f, mFish->GetZ()};

float proj_v_length = Dot(pt_v, mListener.OrientFront);

X3DAUDIO_VECTOR proj_v = Multiply(mListener.OrientFront, proj_v_length);

X3DAUDIO_VECTOR dist_v = Subtract(pt_v, proj_v);

if(VectorLength(dist_v) < mFish->GetRadius()){
mEmitter.Position = mFish->GetEmitter().Position;

return true;
}else{

mEmitter.Position = Multiply(mListener.OrientFront, 15);

return false;
}

}

void Fisherman::ReelIn(Fish* aFish){

mFish = aFish;
mFish->MoveCloser(mReelSpeed);
mReelingIn = true;
}

void Fisherman::ReelOut(Fish* aFish){
mFish = aFish;
mFish->MoveFurther();
mReelingIn = false;
}

void Fisherman::SetReelSpeed(float deltaTime){
float reelSpeed = 1.0f - deltaTime;
if(reelSpeed < 0.0f){
reelSpeed = 0.0f;
}

if(reelSpeed > 10){

mReelSpeedList.push_back(reelSpeed);
if(mReelSpeedList.size() > 3){
mReelSpeedList.pop_front();
}

reelSpeed = 0.0f;
std::list<float>::const_iterator iterator;
for (iterator = mReelSpeedList.begin(); iterator != mReelSpeedList.end(); ++iterator){
reelSpeed += *iterator;
}mReelSpeed = reelSpeed/mReelSpeedList.size();
}else
mReelSpeed = reelSpeed;
mReelClickTimer = 0.1 / mReelSpeed;

}

void Fisherman::PlayReelClick(){

if(!mReelClick[0]->IsPlaying()){
mReelClick[0]->Play(0);
}else if(!mReelClick[1]->IsPlaying()){
mReelClick[1]->Play(0);
}else if(!mReelClick[2]->IsPlaying()){
mReelClick[2]->Play(0);
}else if(!mReelClick[3]->IsPlaying()){
mReelClick[3]->Play(0);
}else if(!mReelClick[4]->IsPlaying()){
mReelClick[4]->Play(0);
}else {
return;
}
}

bool Fisherman::NothingPlaying(){ // check to see if any sounds are playing
if(mCast->IsPlaying())return false;
if(mCastSplash->IsPlaying())return false;
for(int i =0; i < REEL_CLICK_OBJECTS; i++){
if(mReelClick[i]->IsPlaying()){
return false;
}
}

return true;
}

void Fisherman::SetReelingIn(bool isReelingIn){
mReelingIn = isReelingIn;
}

void Fisherman::SetCastOut(bool hasCastOut){
mCastOut = hasCastOut;
}

float Fisherman::GetReelClickTime(){
return mReelClickTimer/CLICK_TIMER_MULTIPLIER;
}

bool Fisherman::IsReelingIn(){
return mReelingIn;
}

float Fisherman::GetReelSpeed(){
return mReelSpeed;
}

X3DAUDIO_LISTENER Fisherman::GetListener(){
return mListener;
}

X3DAUDIO_EMITTER Fisherman::GetEmitter(){
return mEmitter;
}

X3DAUDIO_DSP_SETTINGS Fisherman::GetSettings(){
return mDSPSettings;
}

XASound* Fisherman::GetCastSound(){
return mCast;
}

XASound* Fisherman::GetCastSplashSound(){
return mCastSplash;
}

bool Fisherman::HasCastSplashed(){
return mCastSplashBool;
}

void Fisherman::SetCastSplashed(bool splashed){
mCastSplashBool = splashed;
}

bool Fisherman::IsCastOut(){
return mCastOut;
}

заголовок:

#ifndef _FISHERMAN_H_
#define _FISHERMAN_H_

#include <X3DAudio.h>
#include <math.h>
#include <list>

#include "VectorCalculations.h"#include "Fish.h"#include "XASound.hpp"using AllanMilne::Audio::XASound;

const float CLICK_TIMER_MULTIPLIER = 2.5f;
const int REEL_CLICK_OBJECTS = 5;
class Fisherman{
public:

Fisherman(XACore* aXACore, XASound *cast, XASound *castSplash, std::list<XASound*> reelClickList)
: // a Fish Object pointer for the fisherman to interact with.
mFish (NULL), mXACore (aXACore),
//XASound objects with sounds for the fisherman
mCast (cast), mCastSplash (castSplash)
{
mReelSpeedList.clear();

for(int i = 0; i < REEL_CLICK_OBJECTS; i++){
mReelClick[i] = reelClickList.front();
mReelClick[i]->SetVolume(2.0f);
reelClickList.pop_front();
mReelClickList.push_back(mReelClick[i]);

}

mCastSplash->SetVolume(7.0f);

mXACore = aXACore;

mCastSplashBool = false;
mCastOut = false;
mReelingIn = false;
mCastDistance = 0.0f;
Initialise();
}

~Fisherman(){}

void Initialise();

void Rotate(int MouseDeltaX);

bool Cast(Fish* aFish);

void ReelIn(Fish* aFish);

void ReelOut(Fish* aFish);

void SetReelSpeed(float deltaTime);

void PlayReelClick();

bool NothingPlaying(); // check to see if any sounds are playing

void SetFront(X3DAUDIO_VECTOR front);

void SetReelingIn(bool isReelingIn);

void SetCastOut(bool hasCastOut);

float GetReelClickTime();

bool IsReelingIn();

float GetReelSpeed();

X3DAUDIO_LISTENER GetListener();

X3DAUDIO_EMITTER GetEmitter();

X3DAUDIO_DSP_SETTINGS GetSettings();

XASound* GetCastSound();

XASound* GetCastSplashSound();

bool HasCastSplashed();

void SetCastSplashed(bool splashed);

bool IsCastOut();private:

XACore *mXACore;

XASound *mCast;
XASound *mCastSplash;
XASound *mReelClick[REEL_CLICK_OBJECTS];float mCastDistance;
float mReelClickTimer;
float mReelSpeed;

std::list<float> mReelSpeedList;
std::list<XASound*> mReelClickList;

X3DAUDIO_LISTENER mListener;
X3DAUDIO_EMITTER mEmitter;
X3DAUDIO_DSP_SETTINGS mDSPSettings;

Fish *mFish;
bool mCastOut;
bool mCastSplashBool;
bool mReelingIn;
};#endif

в том числе windows.h в верхней части заголовочного файла решил эту проблему.

3

Решение

Ошибка также говорит PCONTEXT undefined?

Попробуйте добавить #include <Windows.h> до #include <X3DAudio.h>,

В ответ на комментарий о unresolved external symbol:

Это потому, что вы не определили Fisherman::SetFront в файле cpp.

8

Другие решения

Весь код будет полезным. Вы помните очевидное, чтобы дать пространство имен именам функций и т. Д.?

class A { void foo() { } };
=>
class A { void foo(); }
void A::foo() { ... }

так далее?

Самым быстрым способом было бы вернуться обратно в состояние, когда оно работало, и не перемещать целиком сразу, а только одну функцию за раз. Затем, когда возникнет проблема, вы можете дать нам этот конкретный код или попытаться исправить его самостоятельно.

0

Вполне возможно, что где-то перед этой строкой есть просто пропущенный «;».

Дважды проверьте свой код, помните, что все, что вы определяете в файле cpp, должно быть уже объявлено в определении вашего класса.

Я бы предпочел оставить комментарий, но, видимо, мне не разрешено.

В любом случае, в качестве более простого способа дать нам представление о том, что вы пытаетесь сделать, обязательно опубликуйте свой код — он не обязательно должен быть именно таким, каким вы его используете, но должен быть кратким фрагментом общего кода, подчеркивающим, как вы делать что-то. (SSCCE) Если это действительно ошибка в том, как вы ее набрали, было бы хорошо иметь ваш точный код, но поместите его в pastebin и предоставьте ссылку, чтобы эта страница не заканчивалась множеством кода.

РЕДАКТИРОВАТЬ:
winnt.h, очевидно, вызывает все виды проблем: Странная ошибка компиляции, связанная с Winnt.h
насколько я знаю, он используется для определения конкретных заголовков winAPI. Одно из решений, предложенных в этом потоке, состоит в том, чтобы получить определения из другого заголовка окна, прежде чем включать какой-либо заголовок, который требует этих определений.

0
По вопросам рекламы [email protected]