Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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++ 模板类关系 模板 类TestContains; 模板 类TestStore/:public TestContains { 公众: 测试存储(T第一,T第二,T W,T H) { x=第一; y=秒; 宽度=W; 高度=H; test包含a(x,y,宽度,高度); *b=a; } ~TestStore(){}; tx; T y; T宽; T高度; TestContains*GetRect(); 受保护的: 私人: 测试包含*b; };_C++_Class_Templates - Fatal编程技术网

C++ 模板类关系 模板 类TestContains; 模板 类TestStore/:public TestContains { 公众: 测试存储(T第一,T第二,T W,T H) { x=第一; y=秒; 宽度=W; 高度=H; test包含a(x,y,宽度,高度); *b=a; } ~TestStore(){}; tx; T y; T宽; T高度; TestContains*GetRect(); 受保护的: 私人: 测试包含*b; };

C++ 模板类关系 模板 类TestContains; 模板 类TestStore/:public TestContains { 公众: 测试存储(T第一,T第二,T W,T H) { x=第一; y=秒; 宽度=W; 高度=H; test包含a(x,y,宽度,高度); *b=a; } ~TestStore(){}; tx; T y; T宽; T高度; TestContains*GetRect(); 受保护的: 私人: 测试包含*b; };,c++,class,templates,C++,Class,Templates,人民党 template<class Rawr> class TestContains; template <class T> class TestStore//: public TestContains { public: TestStore(T first, T second, T W, T H) { x = first; y = second; Width = W; Height =

人民党

template<class Rawr>
class TestContains;

template <class T>
class TestStore//: public TestContains
{
public:
    TestStore(T first, T second, T W, T H)
    {
        x = first;
        y = second;
        Width = W;
        Height = H;

        TestContains<T> a(x, y, Width, Height);

        *b = a;
    }
    ~TestStore() {};


    T x;
    T y;
    T Width;
    T Height;

TestContains<T>* GetRect();

protected:
private:
TestContains<T> *b;
};
模板
TestContains*TestStore::GetRect()
{
返回&b;
}
测试包含

template<class T>
TestContains<T>* TestStore<T>::GetRect()
{
    return &b;
}
模板
类TestContains
{
公众:
TestContains(Rawr-first,Rawr-second,Rawr-W,Rawr-H)
{
x=第一;
y=秒;
宽度=W;
高度=H;
}
~TestContains(){};
模板
bool包含(T Mx,T My)
{

如果(Mx>=x&&Mx=y&&My错误告诉您
test.GetRect()
返回指针。要通过指向对象的指针访问成员,应使用
->
而不是

TestStore<int> test(0, 0, 100, 100);

if (test.GetRect().Contains(mouseX, mouseY))
{
    std::cout << "Within 0, 0, 100, 100" << std::endl;
}
//▾▾
if(test.GetRect()->Contains(mouseX,mouseY))
{

std::cout错误告诉您
test.GetRect()
返回指针。要通过指向对象的指针访问成员,应使用
->
而不是

TestStore<int> test(0, 0, 100, 100);

if (test.GetRect().Contains(mouseX, mouseY))
{
    std::cout << "Within 0, 0, 100, 100" << std::endl;
}
//▾▾
if(test.GetRect()->Contains(mouseX,mouseY))
{

std::cout两个问题:一个是sftrabbit在其回答中指出的。另一个是您尝试在
GetRect
函数中返回指向指针的指针:使用
&
运算符的地址将使return语句返回指针的地址,即指向指针的指针

但是,您有一个比编译错误更严重的问题,这是一个未定义的行为,很可能最终导致崩溃:在类
TestStore
中,您有一个成员变量
b
,它是一个指针。在构造函数中,您指定了它指向的对象,但当时它实际上并不指向nything和你覆盖随机内存


在使用解引用操作符指定指针指向的位置之前分配指针,或者根本不使用指针(我的建议).

两个问题:一个是sftrabbit在其回答中指出的。另一个是您尝试在
GetRect
函数中返回指向指针的指针:使用
&
运算符的地址将使return语句返回指针的地址,即指向指针的指针

但是,您有一个比编译错误更严重的问题,这是一个未定义的行为,很可能最终导致崩溃:在类
TestStore
中,您有一个成员变量
b
,它是一个指针。在构造函数中,您指定了它指向的对象,但当时它实际上并不指向nything和你覆盖随机内存


要么在使用取消引用操作符分配指针指向的位置之前分配指针,要么根本不使用指针(我的建议)。

Lol,我觉得这有点傻!解决了这个问题。现在我得到了对TestStore::GetRect()的未定义引用@Chivos这是因为你不能将模板类拆分为单独的头文件和源文件。所有函数都必须在头文件中完全定义。Lol,我觉得这有点傻!这解决了这个问题。现在我得到了对TestStore::GetRect()的未定义引用@Chivos这是因为你不能将模板类拆分为单独的头文件和源文件。所有函数都必须在头文件中完全定义。我明白了!!非常感谢。我想我的问题已经得到了回答!!我明白了!!非常感谢。我想我的问题已经得到了回答!!
//                ▾▾
if (test.GetRect()->Contains(mouseX, mouseY))
{
    std::cout << "Within 0, 0, 100, 100" << std::endl;
}