托管类型的成员函数无法编译为非托管函数

时间:2013-10-04 16:25:52

标签: c++ c++-cli

这是我程序中的第二个表单,它会产生上述错误。构造函数是生成错误的原因,我看不出原因。它与我的主窗口的构造函数几乎相同,它的工作正常。

唯一的区别是这一个采取了争论。 (即使我在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;非管理项目。

2 个答案:

答案 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(以前没有添加)时,问题已解决