加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – VS2012抱怨“已经定义”的课程,尽管有一次pragma

发布时间:2020-12-16 07:06:53 所属栏目:百科 来源:网络整理
导读:我的项目有点窘境.语言是C,编辑器Visual Studio 2012,它应该是一个光线投射渲染器一旦完成(光线投射位仍然缺失). 为此,我使用数学库Eigen.但是,当我尝试构建时,我收到链接错误.我过去没有太多使用过C语言,对这个错误所做的研究对我没有帮助. 这是编译器的输
我的项目有点窘境.语言是C,编辑器Visual Studio 2012,它应该是一个光线投射渲染器一旦完成(光线投射位仍然缺失).
为此,我使用数学库Eigen.但是,当我尝试构建时,我收到链接错误.我过去没有太多使用过C语言,对这个错误所做的研究对我没有帮助.

这是编译器的输出:

1>------ Build started: Project: TX52-3DStereo-RT-CUDA,Configuration: Debug x64 ------
1>Build started 06/12/2013 10:55:56.
1>InitializeBuildStatus:
1>  Touching "x64DebugTX52-3DStereo-RT-CUDA.unsuccessfulbuild".
1>AddCudaCompilePropsDeps:
1>Skipping target "AddCudaCompilePropsDeps" because all output files are up-to-date with respect to the input files.
1>CudaBuild:
1>  Compiling CUDA source file kernel.cu...
1>  
1>  C:UsersSatanikasDocumentsVisual Studio 2012ProjectsTX52-3DStereo-RT-CUDATX52-3DStereo-RT-CUDA>"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.5binnvcc.exe" -gencode=arch=compute_10,code="sm_10,compute_10" --use-local-env --cl-version 2012 -ccbin "C:Program Files (x86)Microsoft Visual Studio 11.0VCbinx86_amd64"  -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.5include" -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.5include"  -G   --keep-dir x64Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o x64Debugkernel.cu.obj "C:UsersSatanikasDocumentsVisual Studio 2012ProjectsTX52-3DStereo-RT-CUDATX52-3DStereo-RT-CUDAkernel.cu" 
1>c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Core/arch/SSE/PacketMath.h(169): warning : controlling expression is constant
1>  
1>c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Core/Block.h(102): error : "operator=" has already been declared in the current scope
1>            detected during instantiation of class "Eigen::Block<XprType,BlockRows,BlockCols,InnerPanel> [with XprType=VectorType,BlockRows=<expression>,BlockCols=<expression>,InnerPanel=false]" 
1>  c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Core/VectorBlock.h(58): here
1>  
1>c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Core/Ref.h(122): error : "operator=" has already been declared in the current scope
1>            detected during instantiation of class "Eigen::RefBase<Derived> [with Derived=Eigen::Ref<PlainObjectType,Options,StrideType>]" 
1>  (183): here
1>  
1>c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Core/products/Parallelizer.h(20): warning : variable "m_maxThreads" was set but never used
1>  
1>c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Geometry/RotationBase.h(76): error : function template "Eigen::operator*(const Eigen::EigenBase<OtherDerived> &,const Eigen::Quaternion<_Scalar,_Options> &)" has already been defined
1>            detected during:
1>              instantiation of class "Eigen::RotationBase<Derived,_Dim> [with Derived=Eigen::Quaternion<_Scalar,_Options>,_Dim=3]" 
1>  c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Geometry/Quaternion.h(35): here
1>              instantiation of class "Eigen::QuaternionBase<Derived> [with Derived=Eigen::Quaternion<_Scalar,_Options>]" 
1>  c:userssatanikasdocumentsvisual studio 2012commoninceigensrc/Geometry/Quaternion.h(236): here
1>  
1>  3 errors detected in the compilation of "C:/Users/SATANI~1/AppData/Local/Temp/tmpxft_000010c8_00000000-5_kernel.cpp1.ii".
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V110BuildCustomizationsCUDA 5.5.targets(592,9): error MSB3721: The command ""C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.5binnvcc.exe" -gencode=arch=compute_10,compute_10" --use-local-env --cl-version 2012 -ccbin "C:Program Files (x86)Microsoft Visual Studio 11.0VCbinx86_amd64"  -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.5include" -I"C:Program FilesNVIDIA GPU Computing ToolkitCUDAv5.5include"  -G   --keep-dir x64Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o x64Debugkernel.cu.obj "C:UsersSatanikasDocumentsVisual Studio 2012ProjectsTX52-3DStereo-RT-CUDATX52-3DStereo-RT-CUDAkernel.cu"" exited with code 2.
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:03.40
========== Build: 0 succeeded,1 failed,0 up-to-date,0 skipped ==========

错误来自3个类,这里??是它们的标题:

#pragma once

#include <EigenGeometry>

class TransformedObject
{
public:
    TransformedObject(void);
    ~TransformedObject(void);

    void rotate(const Eigen::Quaternionf&);
    void setRotation(const Eigen::Quaternionf&);
    void translate(const Eigen::Vector3f&);
    void setTranslation(const Eigen::Vector3f&);
    void scale(const float&);
    const Eigen::Matrix4f getMatrix(void);

    Eigen::Transform<float,3,Eigen::Affine> transform;
};


#pragma once

#include "TransformedObject.h"

class Camera
{
public:
    Camera(void);
    ~Camera(void);
    void computeRays();
    void setFOV(float angle);
    void setResolution(int w,int h);
private:
    TransformedObject transformation;
    float fov;
    unsigned int width;
    unsigned int height;
    float* raysDirections;
    Eigen::Vector3f raysOrigin;
};


#pragma once

#include <forward_list>
#include "TransformedObject.h"

class ScenegraphNode
{
public:
    ScenegraphNode(void);
    ~ScenegraphNode(void);
private:
    TransformedObject transformation;
    size_t sceneHash;
    std::forward_list<ScenegraphNode*> children;

    int countVertices() const;
};

如您所见,所有类都有“pragma once”,而且Eigen类都由ifndef / define / endif保护.

我收集的是,这可能是由于我的代码由不同的TU编译,其中包括Eigen,因此所有“已经定义”的错误.但是我不知道如何纠正这个问题(我不能使用extern,因为我使用我的类TransformedObject作为其他类的成员).

提前致谢,

解决方法

复制user3073879(提交者)评论:

“问题解决了,我从包含声明摄像机的主机功能的文件中删除了所有CUDA代码.(这是一个测试功能).这意味着它确实是NVCC的一个问题”

把这个问题标记为已回答.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读