【问题标题】:getting errors while instantiating pointer for structs of native c++ code from c++/cli从 c++/cli 实例化本机 c++ 代码结构的指针时出错
【发布时间】:2012-05-23 04:25:59
【问题描述】:

下面提到的是我的 c++/cli "*.h" 文件

// rmsCInterfaceWrapper.h
#ifndef RMSCINTERFACE_H
#define RMSCINTERFACE_H
#ifndef RMSREQINFO_H
#define RMSREQINFO_H
#ifndef RMSCLIENTINFO_H
#define RMSCLIENTINFO_H
#ifndef RMSPHYSICIANINFO_H
#define RMSPHYSICIANINFO_H
#ifndef RMSREQPOLICYINFO_H
#define RMSREQPOLICYINFO_H

#pragma once
#include "D:\nbsource code\RMS\rmsCAPI\rmsCInterface.h"
#pragma comment(lib,"rmsCAPI.lib")
#include "D:\nbsource code\RMS\rmsDLL\rmsReqInfo.h"
#include "D:\nbsource code\RMS\rmsDLL\rmsClientInfo.h"
#include "D:\nbsource code\RMS\rmsDLL\rmsPhysicianInfo.h"
#include "D:\nbsource code\RMS\rmsDLL\rmsReqPolicyInfo.h"
#pragma comment(lib,"rmsDLL.lib")

using namespace System;

namespace rmsCInterfaceWrapper
{
public ref class rmsCInterface
{
    // TODO: Add your methods for this class here.
private:
    rmsReqInfoStruct *rmsReqInfo;
    rmsClientInfoStruct *rmsClientInfo;
    rmsPhysicianInfoStruct *rmsPhysicianInfo;
    rmsReqPolicyInfoStruct *rmsReqPolInfo;
    rmsAddlOrderInfoStruct *rmsAddOrderInfo;
public:
    rmsCInterface();
    ~rmsCInterface();
    long OrderReq();
};
}
#endif

我已经为这些原生 c++ 结构 rmsReqInfoStruct、rmsClientInfoStruct、rmsPhysicianInfoStruct、rmsReqPolicyInfoStruct、rmsAddlOrderInfoStruct 声明了指针。当我编译这个时,我得到了下面提到的这些错误,我不知道为什么我会得到这些

1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(30) : error C2143: syntax error : missing ';' before '*'
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(30) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(30) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(31) : error C2143: syntax error : missing ';' before '*'
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(31) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(31) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(32) : error C2143: syntax error : missing ';' before '*'
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(32) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(32) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(33) : error C2143: syntax error : missing ';' before '*'
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(33) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(33) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(34) : error C2143: syntax error : missing ';' before '*'
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(34) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\vamsi\rmscinterfacewrapper\rmscinterfacewrapper\rmsCInterfaceWrapper.h(34) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

所有这些错误都显示在类私有声明本身的结构指针中,我无法弄清楚它们是什么原因造成的。谁能帮忙。

【问题讨论】:

  • 多重猜测:你应该转发声明你的结构。给定的结构是否位于定义的“系统”命名空间中?用正确的守卫替换#pragma once
  • @akaltar--- 结构位于我包含但不在命名空间中的头文件中。我删除了#pragma 并尝试过,但没有成功。
  • 删除定义 RMSREQINFO_H、RMSCLIENTINFO_H 等
  • @DarkGray---如果我删除它们,我会收到更多错误(重新定义错误),所以当我包含它们时,错误会减少。

标签: c++ interop c++-cli mixed-mode


【解决方案1】:

我能够解决这个问题。由于我创建了一个 clr---> 类库项目,它自动生成了 stdafx.h 和 stdafx.cpp 文件。当我使用 c++/cli 围绕我的本地 c++ 代码编写包装器时,我将自动生成的 c++/cli stdafx.h 文件与我的本地 stdafx.h 文件复制并从 .h 中删除了 #ifndef,#define,#pragma 语句我在上面提供的文件,所以做了所有这些工作,我能够生成我可以在我的 c# 程序中使用的 dll 文件作为参考......谢谢大家的帮助......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多