C++11 ';std::共享ptr和x27;尚未声明,#包括<;记忆>;不';行不通
我知道有很多类似的问题,但大多数问题都能解决,包括记忆问题。 我以前有过这个问题,上次那个解决方案似乎解决了这个问题,但这次没有 我正在和一个使用macbook的同事一起做一个大学项目,我使用的是Windows10,但通常都不是问题。 我们正在与Clion和Cmake合作,并使用SFML库 目前,这个项目在她的macbook上运行得很好,但在我的macbook上没有运行。代码相同,目录相同,位置相同。 上次我遇到了这个问题,正如我刚才所说,我解决了,包括C++11 ';std::共享ptr和x27;尚未声明,#包括<;记忆>;不';行不通,c++11,cmake,shared-ptr,clion,C++11,Cmake,Shared Ptr,Clion,我知道有很多类似的问题,但大多数问题都能解决,包括记忆问题。 我以前有过这个问题,上次那个解决方案似乎解决了这个问题,但这次没有 我正在和一个使用macbook的同事一起做一个大学项目,我使用的是Windows10,但通常都不是问题。 我们正在与Clion和Cmake合作,并使用SFML库 目前,这个项目在她的macbook上运行得很好,但在我的macbook上没有运行。代码相同,目录相同,位置相同。 上次我遇到了这个问题,正如我刚才所说,我解决了,包括在ResourceHolder.h文件中。
在ResourceHolder.h
文件中。
现在我无法将该文件包含在我们的Character.h
文件中(不知道为什么,就像他们找不到对方一样,但是CMakelist.txt
包含了我们所有的文件)。当然,我试着在我们的文件树中移动,但没有任何效果。
如果我在Character.h
中包含内存
,那么项目将运行到96%,然后会出现大量未定义的引用错误
有人能帮我或解释一下如何用共享指针一次性解决这个问题吗?我想知道为什么我不能将该文件(ResourceHolder
)也包含在同一项目的另一个文件中
编辑:编译器是MinGW,下面的代码没有包含在内
编辑:我清理了很多嵌套的#include,然后像那样更改了Cmake
target_link_libraries(BlackRose core ${SFML_LIBRARIES} )
现在似乎奏效了。
这是CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.8)
project(BlackRose)
cmake_policy(SET CMP0074 OLD)
set(SFML_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/SFML)
set(CMAKE_CXX_STANDARD 11)
message("Adding test subdir")
add_subdirectory(test)
set(SOURCE_FILES source/Game.cpp include/Game.h
include/management/ResourceHolder.h source/ProceduralMap.cpp
include/ProceduralMap.h
include/management/ResourceIdentifier.h source/World.cpp include/World.h
source/Characters/Character.cpp include/Characters/Character.h
include/Inventory.h source/Characters/PlayerCharacter.cpp
include/Characters/PlayerCharacter.h source/Objects/Weapon.cpp
include/Objects/Weapon.h source/Objects/Shield.cpp i
include/Objects/Shield.h source/Characters/Enemy.cpp
include/Characters/Enemy.h
source/Entity.cpp include/Entity.h source/Objects/Object.cpp
include/Objects/Object.h source/Objects/ConsumableObject.cpp
include/Objects/ConsumableObject.h source/Objects/RangedWeapon.cpp
include/Objects/RangedWeapon.h source/Objects/MeleeWeapon.cpp
include/Objects/MeleeWeapon.h source/Projectile.cpp include/Projectile.h
include/Random.h source/Random.cpp
source/Objects/Tile.cpp include/Objects/Tile.h
source/Objects/Healpack.cpp include/Objects/Healpack.h
source/textDisplay.cpp include/textDisplay.h)
add_executable(BlackRose source/main.cpp)
set(CMAKE_MODULE_PATH ${SFML_ROOT}/sfml_cmake)
find_package(SFML REQUIRED system window graphics network audio)
include_directories(${SFML_INCLUDE_DIR})
message("Add library")
add_library(core ${SOURCE_FILES})
target_link_libraries(BlackRose ${SFML_LIBRARIES} core)
get_directory_property(output INCLUDE_DIRECTORIES)
message("Include directories:" ${output})
这是标题:
#ifndef BLACKROSE_CHARACTER_H
#define BLACKROSE_CHARACTER_H
#include <SFML/System.hpp>
#include "../Inventory.h"
#include "../Objects/Weapon.h"
#include "../Objects/Shield.h"
#include "../Entity.h"
#include <memory>
class Character: public Entity {
public:
Character();
//virtual ~Character() = 0;
virtual void move();
virtual void fight();
//basic interaction with the world, it will be associated with a key
virtual bool interactWithObject(std::shared_ptr <Object> &object);
virtual void die();
void update();
void display();
public:
int hp;
int hpMax;
int attackDamage;
bool barDisplayed = false;
sf::RectangleShape bar;
sf::RectangleShape lifeBar;
protected:
int resistance;
int speed;
sf::Vector2f position;
Inventory inventory;
sf::Clock timerTextures;
};
#endif //BLACKROSE_CHARACTER_H
\ifndef BLACKROSE\u字符
#定义黑玫瑰字符
#包括
#包括“./Inventory.h”
#包括“./对象/武器.h”
#包括“./Objects/Shield.h”
#包括“./实体.h”
#包括
类特征:公共实体{
公众:
字符();
//虚拟~字符()=0;
虚空移动();
虚拟空战();
//与世界的基本互动,它将与一把钥匙相关联
虚拟bool与对象交互(std::shared_ptr&object);
虚空模();
无效更新();
void display();
公众:
int-hp;
int-hpMax;
攻击损伤;
bool-barDisplayed=false;
sf::矩形形状条;
sf::矩形救生艇;
受保护的:
内阻;
整数速度;
sf::矢量2f位置;
存货;
sf::时钟时间结构;
};
#endif//BLACKROSE\u CHARACTER\u H
.cpp文件:
#include "../../include/Characters/Character.h"
Character::Character() {
//all characters are this big
rect.setSize(sf::Vector2f(32,32));
//life bar
bar = sf::RectangleShape(sf::Vector2f(32,5));
lifeBar = sf::RectangleShape(sf::Vector2f(32,5));
bar.setOutlineThickness(3);
bar.setOutlineColor(sf::Color::Black);
bar.setFillColor(sf::Color::Black);
lifeBar.setFillColor(sf::Color::Green);
/*
bar.setPosition(position.x, position.y-16);
lifeBar.setPosition(position.x, position.y-16);
*/
//TODO istanzia un inventory
}
bool Character::interactWithObject(std::shared_ptr <Object> &object) {
return true;
}
...other methods
#include“../../include/Characters/Character.h”
Character::Character(){
//所有的角色都这么大
rect.setSize(sf::Vector2f(32,32));
//生活酒吧
bar=sf::矩形(sf::Vector2f(32,5));
lifeBar=sf::矩形(sf::Vector2f(32,5));
钢筋设置厚度(3);
条形图。设置大纲颜色(sf::颜色::黑色);
bar.setFillColor(sf::Color::Black);
lifeBar.setFillColor(sf::Color::绿色);
/*
杆设置位置(位置x,位置y-16);
救生艇设置位置(位置x,位置y-16);
*/
//TODO istanzia联合国库存
}
bool Character::interactivewithobject(std::shared\u ptr&object){
返回true;
}
…其他方法
当我不包含内存时,会出现以下错误:
In file included from C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:5:0:
c:\users\ludovico\clionprojects\blackrose\include\characters\character.h:26:42: error: 'std::shared_ptr' has not been declared
virtual bool interactWithObject(std::shared_ptr <Object> &object);
^
c:\users\ludovico\clionprojects\blackrose\include\characters\character.h:26:53: error: expected ',' or '...' before '<' token
virtual bool interactWithObject(std::shared_ptr <Object> &object);
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:41: error: 'bool Character::interactWithObject' is not a static data member of 'class Character'
bool Character::interactWithObject(std::shared_ptr <Object> &object) {
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:36: error: 'shared_ptr' is not a member of 'std'
bool Character::interactWithObject(std::shared_ptr <Object> &object) {
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:59: error: expected primary-expression before '>' token
bool Character::interactWithObject(std::shared_ptr <Object> &object) {
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:62: error: 'object' was not declared in this scope
bool Character::interactWithObject(std::shared_ptr <Object> &object) {
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:70: error: expected ',' or ';' before '{' token
bool Character::interactWithObject(std::shared_ptr <Object> &object) {
^
CMakeFiles\core.dir\build.make:104: recipe for target 'CMakeFiles/core.dir/source/Characters/Character.cpp.obj' failed
mingw32-make.exe[2]: *** [CMakeFiles/core.dir/source/Characters/Character.cpp.obj] Error 1
mingw32-make.exe[2]: *** Waiting for unfinished jobs....
In file included from c:\users\ludovico\clionprojects\blackrose\include\characters\playercharacter.h:9:0,
from C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\PlayerCharacter.cpp:5:
c:\users\ludovico\clionprojects\blackrose\include\characters\Character.h:26:42: error: 'std::shared_ptr' has not been declared
virtual bool interactWithObject(std::shared_ptr <Object> &object);
^
c:\users\ludovico\clionprojects\blackrose\include\characters\Character.h:26:53: error: expected ',' or '...' before '<' token
virtual bool interactWithObject(std::shared_ptr <Object> &object);
^
mingw32-make.exe[2]: *** [CMakeFiles/core.dir/source/Characters/PlayerCharacter.cpp.obj] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/core.dir/all] Error 2
CMakeFiles\core.dir\build.make:118: recipe for target 'CMakeFiles/core.dir/source/Characters/PlayerCharacter.cpp.obj' failed
CMakeFiles\Makefile2:108: recipe for target 'CMakeFiles/core.dir/all' failed
mingw32-make.exe: *** [all] Error 2
Makefile:128: recipe for target 'all' failed
包含在C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:5:0:
c:\users\ludovico\clionprojects\blackrose\include\characters\character.h:26:42:错误:“std::shared\u ptr”尚未声明
虚拟bool与对象交互(std::shared_ptr&object);
^
c:\users\ludovico\clionprojects\blackrose\include\characters\character.h:26:53:错误:应在“”标记之前加上“,”或“…”
bool Character::interactivewithobject(std::shared\u ptr&object){
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:62:错误:“对象”未在此范围内声明
bool Character::interactivewithobject(std::shared\u ptr&object){
^
C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\Character.cpp:37:70:错误:在“{”标记之前应为“,”或“;”
bool Character::interactivewithobject(std::shared\u ptr&object){
^
CMakeFiles\core.dir\build.make:104:目标“CMakeFiles/core.dir/source/Characters/Character.cpp.obj”的配方失败
mingw32 make.exe[2]:***[CMakeFiles/core.dir/source/Characters/Character.cpp.obj]错误1
mingw32 make.exe[2]:***正在等待未完成的作业。。。。
在c:\users\ludovico\clionprojects\blackrose\include\characters\playercharacter.h:9:0中包含的文件中,
来自C:\Users\Ludovico\CLionProjects\BlackRose\source\Characters\PlayerCharacter.cpp:5:
c:\users\ludovico\clionprojects\blackrose\include\characters\Character.h:26:42:错误:“std::shared\u ptr”尚未声明
虚拟bool与对象交互(std::shared_ptr&object);
^
c:\users\ludovico\clionprojects\blackrose\include\characters\Character.h:26:53:错误:在“之前应该有“,”或“…”,请尝试将set(CMAKE\u CXX\u标准11)
替换为set(CMAKE\u CXX\u标志“${CMAKE\u CXX\u标志}-std=c++11”)
我以前也遇到过同样的问题,这一行肯定有帮助,可能是CMAKE_CXX_标准由于某种原因没有解析为任何标志。什么编译器和版本?您显示的错误消息是否与代码对应?您会说“如果我在Character.h
中包含内存
,则项目将运行到96%,然后会出现大量未定义的引用错误。”。您的标题包含该包含,但错误与“未定义的引用”无关。我编辑此帖子是为了回答您的问题