c++ - '渲染' : 'class' type redefinition (C2011)

标签 c++ visual-studio

关于这个主题,Stack Overflow 上有很多类似的问题。

我正在创建一个包含多个文件(.cpp 和 .h)的项目。我收到错误:

C2011: 'Render': 'class' type redefinition

我已经看过了。有些人说使用守卫,所以我在所有头文件上使用 #pragma once。有人说 header 被多次包含,但守卫会阻止这种情况。那我做错了什么?

代码:

立方体.h

#pragma once

char orientation(int sides, int hV);

std::vector<char> visOrd(std::string *xOrd, int *pov, int ord);

std::vector<int> convertColour(std::vector<std::string> rlBoxCol);

std::tuple<std::vector<int>, std::vector<std::string>> organiseLayers(std::vector<int> boxCoords, std::vector<std::string> rlBoxCol, std::vector<float> rot);


class Render
{
private:
    std::vector<float> rot;
    std::vector<int> boxCoords;
    std::vector<std::string> rlBoxCol;
    int gridSize;
    int cubeSize;
    std::vector<int> offset;

public:
    Render();


    void setRotation(std::vector<float> setRot);
    std::vector<float> getRotation();

    void setCoordinates(std::vector<int> setBoxCoords);
    std::vector<int> getCoordinates();

    void setColours(std::vector<std::string> setRlBoxCol);
    std::vector<std::string> getColours();

    void setSizeOfGrid(int setGridSize);
    int getSizeOfGrid();

    void setSizeOfCubes(int setCubeSize);
    int getSizeOfCubes();

    void setOffset(std::vector<int> setOffset);
    std::vector<int> getOffset();


    void display();
};

立方体.cpp

#include "Cubes.h"
#include "Global.h"

char orientation(int sides, int hV)
{
// Code
}

std::vector<char> visOrd(std::string *xOrd, int *pov, int ord)
{
// Code
}


std::vector<int> convertColour(std::vector<std::string> rlBoxCol)
{
// Code
}

std::tuple<std::vector<int>, std::vector<std::string>> organiseLayers(std::vector<int> boxCoords, std::vector<std::string> rlBoxCol, std::vector<float> rot)
{
// Code
}



Render::Render()
{
    this->rot;
    this->boxCoords;
    this->rlBoxCol;
    this->gridSize;
    this->cubeSize;
    this->offset;
}


void Render::setRotation(std::vector<float> setRot)
{ // Set rotation
    rot = setRot;
}
std::vector<float> Render::getRotation()
{ // Get rotation
    return rot;
}

void Render::setCoordinates(std::vector<int> setBoxCoords)
{
    boxCoords = setBoxCoords;
}
std::vector<int> Render::getCoordinates()
{
    return boxCoords;
}

void Render::setColours(std::vector<std::string> setRlBoxCol)
{
    rlBoxCol = setRlBoxCol;
}
std::vector<std::string> Render::getColours()
{
    return rlBoxCol;
}

void Render::setSizeOfGrid(int setGridSize)
{
    gridSize = setGridSize;
}
int Render::getSizeOfGrid()
{
    return gridSize;
}

void Render::setSizeOfCubes(int setCubeSize)
{
    cubeSize = setCubeSize;
}
int Render::getSizeOfCubes()
{
    return cubeSize;
}

void Render::setOffset(std::vector<int> setOffset)
{
    offset = setOffset;
}
std::vector<int> Render::getOffset()
{
    return offset;
}


void Render::display()
{
// Drawing code
}

编辑:

我现在已经按照您所说的方式更改了代码。现在我收到错误 LNK2005 和 LNK1169。现在出了什么问题?

编辑 2:(错误)

LNK2005

"class sf::RenderWindow Window" (?Window@@3VRenderWindow@sf@@A) already defined in Cubes.obj

C:\Users\George\Documents\C++\Projects\Don't fall\Don't fall\main.obj 1

.

LNK2005

"class std::basic_string,class std::allocator > status" (?status@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) already defined in Cubes.obj

C:\Users\George\Documents\C++\Projects\Don't fall\Don't fall\main.obj 1

.

LNK1169

one or more multiply defined symbols found

C:\Users\George\Documents\C++\Projects\Don't fall\Debug\Don't fall.exe 1

Global.h:

#pragma once
#include <SFML\Graphics.hpp>

// This is where all my global variables will be


extern sf::RenderWindow Window(sf::VideoMode(500, 500), "Maximize window to play the game");
extern std::string status = "NULL";

最佳答案

您的 Cubes.cpp 确实重新定义了 Render 类。通常,.h 文件具有类原型(prototype),而 .cpp 文件定义方法。

尝试将其添加到 Cubes.cpp 的顶部:

#include "Cubes.h"

从 Cubes.cpp 的顶部删除它:

class Render
{
private:
    std::vector<float> rot;
    std::vector<int> boxCoords;
    std::vector<std::string> rlBoxCol;
    int gridSize;
    int cubeSize;
    std::vector<int> offset;

public:   

并将其从底部移除:

};

关于c++ - '渲染' : 'class' type redefinition (C2011),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360852/

相关文章:

c++ - 是否可以自定义 Visual Studio 自动套用格式?

visual-studio - 正则表达式:查找/替换之前没有给定字符串的所有子字符串?

c++ - 在所有操作系统中应用文件统计(统计的结构类型)

c++ - std::fstream 似乎以不同的大小读取

c++ - std::max_element 跳过 NAN

javascript - 使用 Emscripten 从 JavaScript 异步调用 C++ 函数

visual-studio - 将静态 boost 构建链接到 VS2012 和 Win32/64 下的静态库

visual-studio - 在 Visual Studio 2019 中使用 v141 平台工具集构建 C++/CX 项目失败

c++ - STL 位集移位运算符导致段错误

javascript - 打开 JavaScript 文件时 Visual Studio 2008 无响应