CLR 命名空间不存在
CLR namespace does not exist
我有一个包含 2 个函数的 C# 项目
namespace LibiqCommonStructures
{
public class BlackLevelData : List<BlackLevelLookupTable>
{
public BlackLevelData()
{
}
public BlackLevelData(BlackLevelData original)
: base(original.DeepCopy())
{
}
public void AddLookupTable(double gain, double exposure, double[] levels)
{
var table = new BlackLevelLookupTable
{
AnalogGain = gain,
ExposureTime = exposure,
ChannelLevels = levels
};
Add(table);
}
}
}
SaturationLevelData 相同
我创建了一个c++\CLI项目,我想把这两个class作为参数传给一个函数
#pragma once
#include "Preprocessor.h"
using namespace LibiqCommonStructures;
namespace ToolBox {
public ref class PreprocessorWrapper
{
public:
PreprocessorWrapper();
void Function1(BlackLevelData^ blackLevelData, SaturationLevelData^ saturationLevelData);
private:
Preprocessor* _preprocessor;
};
}
header
#include "PreprocessorWrapper.h"
void ToolBox::PreprocessorWrapper::Function1(BlackLevelData^ blackLevelData, SaturationLevelData^ saturationLevelData)
{
_preprocessor->Function1();
}
ToolBox::PreprocessorWrapper::PreprocessorWrapper()
{
_preprocessor = new Preprocessor();
}
这是我得到的错误
Error 2 error C2871: 'LibiqCommonStructures' : a namespace with this name does not exist g:\iqtool2\src\libiqtool\preprocessor_interop\PreprocessorWrapper.h 5 1 Preprocessor_interop
Error 8 error C2448: 'ToolBox::PreprocessorWrapper::Function1' : function-style initializer appears to be a function definition G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 5 1 Preprocessor_interop
Error 6 error C2065: 'SaturationLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 7 error C2065: 'saturationLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 4 error C2065: 'BlackLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 5 error C2065: 'blackLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 3 error C2061: syntax error : identifier 'BlackLevelData' g:\iqtool2\src\libiqtool\preprocessor_interop\PreprocessorWrapper.h 13 1 Preprocessor_interop
你能看出我哪里做错了吗?
是的,我添加了 C# 项目作为参考
首先,确保您正在使用 /clr 开关构建 C++ 项目。很奇怪你至少没有引用系统程序集。
其次,您提供的屏幕截图似乎表明您的 C++/CLI 项目正在使用 .NET Framework v4.0。假设您的 C# 项目正在使用 .NET Framework v4.5,请尝试更新您的 C++/CLI 项目以匹配。您可以手动编辑项目文件 (.vcxproj),如下所示:
<PropertyGroup Label="Globals">
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
我通过将版本更改为 v4.0 Visual Studio 2013 来重现您的问题。
我有一个包含 2 个函数的 C# 项目
namespace LibiqCommonStructures
{
public class BlackLevelData : List<BlackLevelLookupTable>
{
public BlackLevelData()
{
}
public BlackLevelData(BlackLevelData original)
: base(original.DeepCopy())
{
}
public void AddLookupTable(double gain, double exposure, double[] levels)
{
var table = new BlackLevelLookupTable
{
AnalogGain = gain,
ExposureTime = exposure,
ChannelLevels = levels
};
Add(table);
}
}
}
SaturationLevelData 相同
我创建了一个c++\CLI项目,我想把这两个class作为参数传给一个函数
#pragma once
#include "Preprocessor.h"
using namespace LibiqCommonStructures;
namespace ToolBox {
public ref class PreprocessorWrapper
{
public:
PreprocessorWrapper();
void Function1(BlackLevelData^ blackLevelData, SaturationLevelData^ saturationLevelData);
private:
Preprocessor* _preprocessor;
};
}
header
#include "PreprocessorWrapper.h"
void ToolBox::PreprocessorWrapper::Function1(BlackLevelData^ blackLevelData, SaturationLevelData^ saturationLevelData)
{
_preprocessor->Function1();
}
ToolBox::PreprocessorWrapper::PreprocessorWrapper()
{
_preprocessor = new Preprocessor();
}
这是我得到的错误
Error 2 error C2871: 'LibiqCommonStructures' : a namespace with this name does not exist g:\iqtool2\src\libiqtool\preprocessor_interop\PreprocessorWrapper.h 5 1 Preprocessor_interop
Error 8 error C2448: 'ToolBox::PreprocessorWrapper::Function1' : function-style initializer appears to be a function definition G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 5 1 Preprocessor_interop
Error 6 error C2065: 'SaturationLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 7 error C2065: 'saturationLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 4 error C2065: 'BlackLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 5 error C2065: 'blackLevelData' : undeclared identifier G:\IQTool2\src\libiqtool\Preprocessor_interop\PreprocessorWrapper.cpp 4 1 Preprocessor_interop
Error 3 error C2061: syntax error : identifier 'BlackLevelData' g:\iqtool2\src\libiqtool\preprocessor_interop\PreprocessorWrapper.h 13 1 Preprocessor_interop
你能看出我哪里做错了吗?
是的,我添加了 C# 项目作为参考
首先,确保您正在使用 /clr 开关构建 C++ 项目。很奇怪你至少没有引用系统程序集。
其次,您提供的屏幕截图似乎表明您的 C++/CLI 项目正在使用 .NET Framework v4.0。假设您的 C# 项目正在使用 .NET Framework v4.5,请尝试更新您的 C++/CLI 项目以匹配。您可以手动编辑项目文件 (.vcxproj),如下所示:
<PropertyGroup Label="Globals">
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
我通过将版本更改为 v4.0 Visual Studio 2013 来重现您的问题。