質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2243閲覧

c++ メンバ関数オーバーロードが出来ない原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/08/22 08:04

提示コードですがヘッダーファイルの以下の関数のオーバーロードで以下のErrorが出ますこれはなぜでしょうか?一致しない関数とありますが一致しているのですが。参考サイトを参考にオーバロードの可能かどうかを調べましたが可能です。
bool getHitEnter(const std::shared_ptr<Line_Collision> col);

参考サイト:https://monozukuri-c.com/langcpp-function-overload/

Error
shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/libTest$ sh run.sh g++ -c -MMD -MP ../lib/src/Rectangle_Collision.cpp -o ../lib/obj/Rectangle_Collision.o ../lib/src/Rectangle_Collision.cpp:119:6: error: no declaration matches ‘bool SDL::Rectangle_Collision::getHitEnter(std::shared_ptr<SDL::Line_Collision>)’ 119 | bool SDL::Rectangle_Collision::getHitEnter(const std::shared_ptr<Line_Collision> col) | ^~~ In file included from ../lib/src/Rectangle_Collision.cpp:1: ../lib/src/Rectangle_Collision.hpp:22:14: note: candidates are: ‘bool SDL::Rectangle_Collision::getHitEnter(std::shared_ptr<Line_Collision>)’ 22 | bool getHitEnter(const std::shared_ptr<Line_Collision> col); | ^~~~~~~~~~~ ../lib/src/Rectangle_Collision.cpp:29:6: note: ‘bool SDL::Rectangle_Collision::getHitEnter(std::shared_ptr<SDL::Rectangle_Collision>)’ 29 | bool SDL::Rectangle_Collision::getHitEnter(const std::shared_ptr<Rectangle_Collision> col) | ^~~ In file included from ../lib/src/Rectangle_Collision.cpp:1: ../lib/src/Rectangle_Collision.hpp:14:11: note: ‘class SDL::Rectangle_Collision’ defined here 14 | class Rectangle_Collision : public Component | ^~~~~~~~~~~~~~~~~~~ make: *** [Makefile:33: ../lib/obj/Rectangle_Collision.o] エラー 1 Compile Error shigurechan@shigurechan-System-Product-Name:~/Program/SDLGame/libTest$
Rectangle_Collision.hpp

cpp

1#ifndef ___RECTANGLE_COLLISION_HPP___ 2#define ___RECTANGLE_COLLISION_HPP___ 3 4#include <glm/glm.hpp> 5#include <memory> 6#include "Collision.hpp" 7 8class Line_Collision; 9class Rectangle_Collision; 10class Circle_Collision; 11 12namespace SDL 13{ 14 class Rectangle_Collision : public Component 15 { 16 17 public: 18 Rectangle_Collision(); 19 ~Rectangle_Collision(); 20 21 bool getHitEnter(const std::shared_ptr<Rectangle_Collision> col); 22 bool getHitEnter(const std::shared_ptr<Line_Collision> col); 23// bool getHitEnter(const std::shared_ptr<CircleCollision> col); 24 25 bool getHitStay(const std::shared_ptr<Rectangle_Collision> col); 26// bool getHitStay(const std::shared_ptr<Line_Collision> col); 27// bool getHitStay(const std::shared_ptr<CircleCollision> col); 28 29 bool getHitExit(const std::shared_ptr<Rectangle_Collision> col); 30// bool getHitExit(const std::shared_ptr<Line_Collision> col); 31// bool getHitExit(const std::shared_ptr<CircleCollision> col); 32 33 virtual void Render_Debug(glm::vec4 color); 34 35 glm::vec2 position; 36 glm::vec2 size; 37 private: 38 39 bool isBoxEnter; 40 bool isBoxStay; 41 bool isBoxExit; 42 43 44 bool isLineEnter; 45 bool isLineStay; 46 bool isLineExit; 47 }; 48 49}; 50 51#endif
Rectangle_Collision.cpp

cpp

1#include "Rectangle_Collision.hpp" 2 3#include "SDLGame.hpp" 4#include "Line_Collision.hpp" 5#include "Collision.hpp" 6#include <memory.h> 7#include <glm/glm.hpp> 8 9 10SDL::Rectangle_Collision::Rectangle_Collision() : Component() 11{ 12 isBoxEnter = false; 13 isBoxStay = false; 14 isBoxExit = false; 15} 16 17/*################################################# 18# 矩形 当たった瞬間 19###################################################*/ 20bool SDL::Rectangle_Collision::getHitEnter(const std::shared_ptr<Rectangle_Collision> col) 21{ 22 if(isEnable == true) 23 { 24 if (BoxCollision_Hit(position,size,col->position,col->size) == true) 25 { 26 if(isBoxEnter == false) 27 { 28 isBoxEnter = true; 29 30 return true; 31 } 32 else 33 { 34 return false; 35 } 36 } 37 else 38 { 39 isBoxEnter = false; 40 } 41 } 42 43 return false; 44 45} 46 47/*################################################# 48# 線 当たった瞬間 49###################################################*/ 50 51bool SDL::Rectangle_Collision::getHitEnter(const std::shared_ptr<Line_Collision> col) 52{ 53 if(isEnable == true) 54 { 55 if(LineCollision_Hit(position,position + glm::vec2(size.x,0),col->startPosition,col->endPosition) == true) 56 { 57 if(isLineEnter == false) 58 { 59 isLineEnter = true; 60 61 return true; 62 } 63 else 64 { 65 return false; 66 } 67 } 68 else if(LineCollision_Hit(position,position + glm::vec2(0,size.y),col->startPosition,col->endPosition) == true) 69 { 70 if(isLineEnter == false) 71 { 72 isLineEnter = true; 73 74 return true; 75 } 76 else 77 { 78 return false; 79 } 80 } 81 else if(LineCollision_Hit(position + size,position + size + glm::vec2(0,size.y),col->startPosition,col->endPosition) == true) 82 { 83 if(isLineEnter == false) 84 { 85 isLineEnter = true; 86 87 return true; 88 } 89 else 90 { 91 return false; 92 } 93 } 94 else if(LineCollision_Hit(position + glm::vec2(0,size.y),position + glm::vec2(0,size.y) + glm::vec2(size.x,0),col->startPosition,col->endPosition) == true) 95 { 96 if(isLineEnter == false) 97 { 98 isLineEnter = true; 99 100 return true; 101 } 102 else 103 { 104 return false; 105 } 106 } 107 else 108 { 109 isLineEnter = false; 110 } 111 } 112 113 return false; 114} 115 116 117 118 119 120 121 122 123 124 125SDL::Rectangle_Collision::~Rectangle_Collision() 126{ 127 128} 129

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

エラーメッセージをよく読みましょう。

エラーメッセージには、定義は getHitEnter(std::shared_ptr<SDL::Line_Collision>)、宣言は getHitEnter(const std::shared_ptr<Line_Collision> col) だと書かれています。Line_Collision の名前空間の有無が違いますね。
Rectangle_Collision.hpp で Line_Collision Rectangle_Collision Circle_Collision が名前空間なしとして前方宣言されていますが、名前空間内で前方宣言すべきなのでは。

投稿2022/08/22 08:23

int32_t

総合スコア20878

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

const std::shared_ptr<Rectangle_Collision>

ぱっと見ですけど、Rectangle_Collision が namespace SDL 内にあるので SDL::Rectangle_Collision じゃないと参照できないのでは。

投稿2022/08/22 08:20

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問