Visual c++ C++/CLI多个错误

Visual c++ C++/CLI多个错误,visual-c++,Visual C++,我在完成这项学校作业时犯了很多令人困惑的错误,我希望能找到一些解决问题的方向。我通常不会这样写,但在调试时,我将所有内容都放在一个文件中。使用Visual Studio Express 2012。当我构建时,我会遇到30多个错误,所以我确信有一些基本的错误我只是忽略了。请给我一个建议,不要找人做作业。谢谢 #include "stdafx.h" #include <Windows.h> #include <iostream> #include "MessageDispla

我在完成这项学校作业时犯了很多令人困惑的错误,我希望能找到一些解决问题的方向。我通常不会这样写,但在调试时,我将所有内容都放在一个文件中。使用Visual Studio Express 2012。当我构建时,我会遇到30多个错误,所以我确信有一些基本的错误我只是忽略了。请给我一个建议,不要找人做作业。谢谢

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include "MessageDisplayClass.h"
#include "LogMessageClass.h"
#include "TimerEventArgs.h"

using namespace System;

ref class CustomTimerClass
{

private:
static bool stopFlag = false;

// create instance of TimerEventArgs
TimerEventArgs^ timerEvent;

public:
CustomTimerClass(void)
{
}
delegate void CustomTimerClass::TimerAlarmHandler(/*Object^ sender, TimerEventArgs^ args*/);
event CustomTimerClass::TimerAlarmHandler^ OnTimerAlarm;

property bool StopFlag
{
    bool get(void)
    {
        return stopFlag;
    }

    void set(bool b)
    {
        stopFlag = b;
    }
}

void run()
{
    Sleep(1000);
    raiseTimerAlarm();
}

void OnStart()
{
    // create instances of DisplayMessageClass and LogMessageClass classes
    DisplayMessageClass^ messageDisplayer = gcnew DisplayMessageClass(this);
    LogMessageClass^ messageLogger = gcnew LogMessageClass(this);

    // display and log messages concerning this event
    messageDisplayer->displayMessage(this, timerEvent);
    messageLogger->logMessage(this, timerEvent);
}

void raiseTimerAlarm()
{
    // create instance of TimerEventArgs and get time of instance creation
    timerEvent = gcnew TimerEventArgs();
    String^ eventTime = timerEvent->EventTime;

    // tie this instance of CustomTimerClass to OnTimerAlarm event and start event
    this->OnTimerAlarm += gcnew TimerAlarmHandler(this, &CustomTimerClass::OnStart);
    OnTimerAlarm();
}
};

ref class MainProgram
{
int main(array<System::String ^> ^args)
{
    CustomTimerClass^ timerClass = gcnew CustomTimerClass();
    DisplayMessageClass^ messageClass = gcnew DisplayMessageClass();
    LogMessageClass^ logerClass = gcnew LogMessageClass();
    timerClass->run();
    return 0;
}
};
#包括“stdafx.h”
#包括
#包括
#包括“MessageDisplayClass.h”
#包括“LogMessageClass.h”
#包括“TimerEventArgs.h”
使用名称空间系统;
ref类CustomTimerClass
{
私人:
静态布尔停止标志=假;
//创建TimerEventArgs的实例
TimerEventArgs^timerEvent;
公众:
CustomTimerClass(无效)
{
}
委托无效CustomTimerClass::TimerAlarmHandler(/*对象^sender,TimerEventArgs^args*/);
事件CustomTimerClass::TimerAlarmHandler^OnTimerAlarm;
属性布尔停止标志
{
bool-get(无效)
{
返回停止标志;
}
无效集(布尔b)
{
stopFlag=b;
}
}
无效运行()
{
睡眠(1000);
raiseTimerAlarm();
}
void OnStart()
{
//创建DisplayMessageClass和LogMessageClass类的实例
DisplayMessageClass^messageDisplayer=gcnew DisplayMessageClass(此);
LogMessageClass ^messageLogger=gcnew LogMessageClass(此);
//显示并记录有关此事件的消息
messageDisplayer->displayMessage(这个,timerEvent);
messageLogger->logMessage(这是timerEvent);
}
void raiseTimerAlarm()
{
//创建TimerEventArgs实例并获取实例创建时间
timerEvent=gcnew TimerEventArgs();
字符串^eventTime=timerEvent->eventTime;
//将CustomTimerClass的此实例绑定到OnTimelArm事件和start事件
this->OnTimerAlarm+=gcnew TimerAlarmHandler(this,&CustomTimerClass::OnStart);
OnTimerAlarm();
}
};
ref类主程序
{
int main(数组^args)
{
CustomTimerClass^timerClass=gcnew CustomTimerClass();
DisplayMessageClass^messageClass=gcnew DisplayMessageClass();
LogMessageClass ^logerClass=gcnew LogMessageClass();
timerClass->run();
返回0;
}
};

在您尝试使用各种类时,编译器还不知道它们。将
main()
函数移到文件末尾。或者更好,将类定义拆分到它们自己的头文件中,然后将它们包含在主源文件中


还有其他相关问题。例如,您试图在编译器知道之前使用
TimerEventArgs
类。因此,您需要将类定义向上移动。这就是为什么最好让每个类都有自己的头文件,然后在需要的地方包含它。尽管严格来说这并不是不必要的,但如果您以正确的顺序声明/定义所有内容。

除了错误的声明顺序之外,问题似乎在于编译器无法识别^bit,这表明您不是以C++/CLI进行编译。右键单击解决方案资源管理器中的项目,然后转到配置属性->常规,并确保将公共语言运行时支持设置为公共语言运行时支持(/clr)

,以方便其他任何人(其他新手):事实证明,我怀疑问题的根源在于,有些班级彼此“包括”是问题所在。使用前向声明,再加上必须创建一个单独的类来充当变量存储处理程序,是我问题的解决方案

下面是给我带来最大问题的两个类,已更正为正确运行:

/*
CustomTimerClass.h
*/

#include "StdAfx.h"
#include "LogMessageClass.h"
#include "MessageDisplayClass.h"
#include "TimerEventArgs.h"
#include "Variables.h"

//ref class MessageDisplayClass;
//ref class Variables;

using namespace System;

ref class CustomTimerClass
{

private:
static bool stopFlag = false;

// create instance of TimerEventArgs
TimerEventArgs^ timerEvent;

// create instance of MessageDisplayClass and LogMessageClass
MessageDisplayClass^ messageDisplayer;
LogMessageClass^ messageLogger;

Variables^ flagVariable;

public:
CustomTimerClass(void)
{
}

delegate void CustomTimerClass::TimerAlarmHandler();
event CustomTimerClass::TimerAlarmHandler^ OnTimerAlarm;

property bool StopFlag
{
    bool get(void)
    {
        return stopFlag;
    }

    void set(bool b)
    {
        stopFlag = flagVariable->Flag;
    }
}

void run()
{
    Sleep(1000);
    raiseTimerAlarm();
}

void OnStart()
{
    // create instances of DisplayMessageClass and LogMessageClass classes
    messageDisplayer = gcnew MessageDisplayClass(this, flagVariable);
    messageLogger = gcnew LogMessageClass(this);

    // display and log messages concerning this event
    messageDisplayer->displayMessage(this, timerEvent);
    messageLogger->logMessage(this, timerEvent);
}

void raiseTimerAlarm()
{
    // create instance of TimerEventArgs and get time of instance creation
    timerEvent = gcnew TimerEventArgs();
    String^ eventTime = timerEvent->EventTime;

    // tie this instance of CustomTimerClass to OnTimerAlarm event and start event
    this->OnTimerAlarm += gcnew TimerAlarmHandler(this, &CustomTimerClass::OnStart);
    OnTimerAlarm();
}
};

/*
MessageDisplayClass serves to display a message that 
represents the time at which the TimerEventArgs class is 
instantiated.  This time is returned through a function
of TimerEventArgs class.
*/

#pragma once

#include "stdafx.h"
#include <iostream>
#include "TimerEventArgs.h"
#include "Variables.h"

using namespace System;

ref class CustomTimerClass; // FORWARD DECLARATION HERE  CAN
                        // ONLY BE USED FOR REFERENCE.  CANNOT
                        // BE USED WHEN METHODS OF THE     CLASS
                        // ARE CALLED

ref class MessageDisplayClass
{

private:
CustomTimerClass^ customTimerRef;

// Variables CLASS CREATED SOLELY TO ACT AS GO-BETWEEN BETWEEN
// MessageDisplayClass and CustomTimerClass
Variables^ variableRef;         

static int counter;
public:

// constructor
MessageDisplayClass(CustomTimerClass^ CustomTimerClassInput, Variables^ variableReference)
{
    customTimerRef = CustomTimerClassInput;
    variableRef = gcnew Variables (CustomTimerClassInput); 
}

void displayMessage(Object^ sender, TimerEventArgs^ timer)
{
    counter ++;
    if (counter > 0)
    {
        variableRef->Flag = true;
        Console::WriteLine("Message:  an event occured at time stamp: " + timer->EventTime);
    }
}
};
/*
CustomTimerClass.h
*/
#包括“StdAfx.h”
#包括“LogMessageClass.h”
#包括“MessageDisplayClass.h”
#包括“TimerEventArgs.h”
#包括“Variables.h”
//ref类MessageDisplayClass;
//ref类变量;
使用名称空间系统;
ref类CustomTimerClass
{
私人:
静态布尔停止标志=假;
//创建TimerEventArgs的实例
TimerEventArgs^timerEvent;
//创建MessageDisplayClass和LogMessageClass的实例
MessageDisplayClass^ messageDisplayer;
LogMessageClass^消息记录器;
变量^标志变量;
公众:
CustomTimerClass(无效)
{
}
委托void CustomTimerClass::TimerAlarmHandler();
事件CustomTimerClass::TimerAlarmHandler^OnTimerAlarm;
属性布尔停止标志
{
bool-get(无效)
{
返回停止标志;
}
无效集(布尔b)
{
stopFlag=flagVariable->Flag;
}
}
无效运行()
{
睡眠(1000);
raiseTimerAlarm();
}
void OnStart()
{
//创建DisplayMessageClass和LogMessageClass类的实例
messageDisplayer=gcnewmessagedisplayClass(此为flagVariable);
messageLogger=gcnew LogMessageClass(此);
//显示并记录有关此事件的消息
messageDisplayer->displayMessage(这个,timerEvent);
messageLogger->logMessage(这是timerEvent);
}
void raiseTimerAlarm()
{
//创建TimerEventArgs实例并获取实例创建时间
timerEvent=gcnew TimerEventArgs();
字符串^eventTime=timerEvent->eventTime;
//将CustomTimerClass的此实例绑定到OnTimelArm事件和start事件
this->OnTimerAlarm+=gcnew TimerAlarmHandler(this,&CustomTimerClass::OnStart);
OnTimerAlarm();
}
};
/*
MessageDisplayClass用于显示以下消息:
表示创建TimerEventArgs类的时间
实例化。此时间通过函数返回
TimerEventArgs类的。
*/
#布拉格语一次
#包括“stdafx.h”
#包括
#包括“TimerEventArgs.h”
#包括“Variables.h”
使用名称空间系统;
ref class CustomTimerClass;//在这里可以转寄报关单
//仅供参考。不能
//当类的方法
//被称为
参考类消息