-
System
类
头文件System.h
#ifndef SYSTEM_H_ #define SYSTEM_H_ #include<iostream> #include"Segment.h" #include"Tracking.h" namespace MY { class System { public: System(); Segment* mpSegment; Tracking* mpTracking; void setSegment(Segment* segment); void setTracking(Tracking* tracking); void setnum(int x); int getnum(); private: int num; }; } #endif
源文件
System.cpp
#include"System.h" namespace MY { System::System() { mpSegment=new Segment; mpTracking=new Tracking; num=0; } void System::setSegment(Segment* segment) { mpSegment=segment; } void System::setTracking(Tracking* tracking) { mpTracking=tracking; } void System::setnum(int x) { num=x; } int System::getnum() { return num; } }
-
Segment
类
头文件Segment.h
注意这里,要再次声明一下另外的类,不然会报错,未定义;可以多次声明#ifndef SEGMENT_H_ #define SEGMENT_H_ #include"System.h" #include"Segment.h" #include"Tracking.h" namespace MY { class System; //注意这里,要再次声明一下另外的类,不然会报错,未定义;可以多次声明 class Tracking; class Segment { public: Segment(); Tracking* mpTracking; System* mpSystem; void setTracking(Tracking* tracking); void setSystem(System* system); void setnum(int x); inline int getnum(){return num;} private: int num; }; } #endif
源文件
Segment.cpp
#include"Segment.h" namespace MY { Segment::Segment():num(0) {} void Segment::setTracking(Tracking* tracking) { mpTracking=tracking; } void Segment::setSystem(System* system) { mpSystem=system; } void Segment::setnum(int x) { num=x; } }
-
Tracking
类
头文件Tracking.h
#ifndef TRACKING_H_ #define TRACKING_H_ #include"System.h" namespace MY { class System; class Segment; class Tracking { public: Tracking(); System* mpSystem; Segment* mpSegment; void setSegment(Segment* segment); void setSystem(System* system); void setnum(int x); inline int getnum(){return num;} private: int num; }; } #endif
源文件
Tracking.cpp
#include"Tracking.h" namespace MY { Tracking::Tracking():num(0) {} void Tracking::setSegment(Segment* segment) { mpSegment=segment; } void Tracking::setSystem(System* system) { mpSystem=system; } void Tracking::setnum(int x) { num=x; } }
-
主程序
test.cpp
#include"Tracking.h" #include"Segment.h" using namespace std; int main(int argc,char **argv) { MY::System SLAM; cout<<"默认构造函数: \n"<<"SLAM.num = "<<SLAM.getnum()<<endl; cout<<"SLAM.mpSegment::"<<SLAM.mpSegment->getnum()<<endl; cout<<"SLAM.mpTracking::"<<SLAM.mpTracking->getnum()<<endl; MY::Segment *segment = new MY::Segment; segment->setnum(6); MY::Tracking * tracking = new MY::Tracking; tracking->setnum(10); SLAM.setSegment(segment); SLAM.setTracking(tracking); SLAM.mpSegment->setTracking(tracking); SLAM.mpTracking->setSegment(segment); cout<<"SLAM.mpSegment->num = "<<SLAM.mpSegment->getnum()<<endl; cout<<"SLAM.mpTracking->num = "<<SLAM.mpTracking->getnum()<<endl; SLAM.setnum(99); SLAM.mpSegment->setSystem(&SLAM); cout<<"SLAM.mpSegment->mpSystem->getnum() = "<<SLAM.mpSegment->mpSystem->getnum()<<endl; return 0; }
-
CMakeLists.tx
t文件cmake_minimum_required(VERSION 3.0) project (CFILES) set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -g -Wall") set(CMAKE_BUILD_TYPE "Release") set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_module) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) include_directories(include) add_library(LIBS src/System.cpp src/Segment.cpp src/Tracking.cpp) add_executable(run src/test.cpp) target_link_libraries(run LIBS)
类的成员类指针,可以相互指向,也就实现了可以互相修改各自的值
最新推荐文章于 2024-08-05 17:54:35 发布