这是我程序中的第二个表单,它会产生上述错误。构造函数是生成错误的原因,我看不出原因。它与我的主窗口的构造函数几乎相同,它的工作正常。
唯一的区别是这一个采取了争论。 (即使我在SettingsForm构造函数中删除了参数,并恢复为void
,我仍然会遇到同样的错误。
有人可以告诉我为什么它似乎认为这个构造函数被编译为非托管的 功能
SettingsForm.h
#pragma once
#pragma managed(push, off)
#include "SpriteyData.h"
#pragma managed(pop)
namespace Spritey {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace SpriteyData;
/// <summary>
/// Summary for SettingsForm
/// </summary>
public ref class SettingsForm : public System::Windows::Forms::Form
{
public:
SpriteySettings* currentSetLocCopy;//A local copy of our current settings.
SettingsForm(SpriteySettings* currentSettings)<------ERROR OCCURS HERE
{
InitializeComponent();
currentSetLocCopy = new SpriteySettings(*currentSettings); //take a copy of our current settings
//initialise the elements on our form to the values stored in the SpriteySettings
this->anchorDevCheckBox->Checked = currentSetLocCopy->isAnchorDevAllowed();
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~SettingsForm()
{
if (components)
{
delete components;
}
if(currentSetLocCopy)
{
delete currentSetLocCopy;
}
}
private: System::Windows::Forms::Button^ CancelButton;
private: System::Windows::Forms::Button^ ApplyButton;
private: System::Windows::Forms::GroupBox^ editorSettingsGroup;
private: System::Windows::Forms::CheckBox^ anchorDevCheckBox;
private:
注意:以上只是构造函数+更多代码,并且只是导致错误的部分的代码示例。
此外,这是一个混合管理&amp;非管理项目。
答案 0 :(得分:3)
Repro这个编译错误:
#pragma managed(push, off)
class SpriteySettings {};
ref class Test
{
public:
Test(SpriteySettings* arg) {}
};
错误C3280:'Test :: Test':托管类型的成员函数无法编译为非托管函数
以及一系列其他错误。所以诊断是这个代码正在编译而没有 / clr编译选项生效。由于这是一个.h文件,可能的原因是你在没有/ clr编译的.cpp文件中#include它。你需要找到#include指令。
答案 1 :(得分:0)
我也面临着同样的问题。在将.Net Target Framework版本添加为v4.5.1(以前没有添加)时,问题已解决