Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 ';std::共享ptr和x27;尚未声明,#包括<;记忆>;不';行不通_C++11_Cmake_Shared Ptr_Clion - Fatal编程技术网

C++11 ';std::共享ptr和x27;尚未声明,#包括<;记忆>;不';行不通

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文件中。

我知道有很多类似的问题,但大多数问题都能解决,包括记忆问题。 我以前有过这个问题,上次那个解决方案似乎解决了这个问题,但这次没有

我正在和一个使用macbook的同事一起做一个大学项目,我使用的是Windows10,但通常都不是问题。 我们正在与Clion和Cmake合作,并使用SFML库

目前,这个项目在她的macbook上运行得很好,但在我的macbook上没有运行。代码相同,目录相同,位置相同。 上次我遇到了这个问题,正如我刚才所说,我解决了,包括
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%,然后会出现大量未定义的引用错误。”。您的标题包含该包含,但错误与“未定义的引用”无关。我编辑此帖子是为了回答您的问题