类作为cli c++中全局非常量变量的库

Class as library of global not const variables in cli c++

本文关键字:常量 非常 变量 全局 cli c++      更新时间:2023-10-16

在只有全局变量的情况下,应该如何定义类?我做了这样的事:

public ref class Klient
{
public:
    Klient(){}
    // zmienne
    static array<DWORD,2>^ klienty = gcnew array<DWORD,2>(40,2);
    static int i = 0;
    static DWORD pid;
    static HANDLE handle;
    static String^ nick;
    //funkcje
};

但如果我包含它超过1次,它就不会编译并显示类错误的重新定义。

你保护好你的头了吗?在Visual Studio中,应该将此指令放在所有头文件的顶部:

#pragma once

这相当于经典的C++标头保护:

#ifndef HEADER_SYMBOL_X
#define HEADER_SYMBOL_X
 // class declarations go here
#endif // HEADER_SYMBOL_X

如果您不保护您的头,C++/CLI确实会尝试在每个include上重新定义您的类。

您必须更加清楚,然后粘贴您得到的错误。此外,如果你有一个"ref"类,编译器会为你生成一个默认的构造函数,所以你不需要写一个。

这段代码对我有效,我能够将静态int值提取到我的WPF应用程序中:

#pragma once
#include "windows.h"
using namespace System;
namespace cppcli 
{
    public ref class Klient
    {
        public:
            static array<DWORD,2>^ klienty = gcnew array<DWORD,2>(40,2);
            static int i = 22;
            static DWORD pid;
            static HANDLE handle;
            static String^ nick;
    };
}

更新:
注意到你的评论,是的,你需要#pragma once。我认为它在那里,因为它是由Visual Studio自动生成的,很高兴知道它的工作原理:-)