Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/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++ 如何禁止使用对象到静态成员函数_C++_Static - Fatal编程技术网

C++ 如何禁止使用对象到静态成员函数

C++ 如何禁止使用对象到静态成员函数,c++,static,C++,Static,我有一个简单的类和一个静态成员函数: class Matrix { public: static Matrix returnSomething ( Matrix &m ) { return Matrix(2,2); } }; int main() { Matrix matrix(2,2); // some matrix Matrix m = Matrix::returnSome

我有一个简单的类和一个静态成员函数:

class Matrix
{
public: 
    static Matrix returnSomething ( Matrix &m )
    {
        return Matrix(2,2);
    }
};
int main()
{
    Matrix matrix(2,2);                           // some matrix
    Matrix m = Matrix::returnSomething ( matrix ) // I should use it that way
    m.print() // it shows the matrix       

    // but I can use it too that way //

    Matrix m;
    m.returnSomething ( matrix )                  // how to make this not allowed??
    m.print() // but here the matrix is NULL, wont show anything 
}
主要功能:

class Matrix
{
public: 
    static Matrix returnSomething ( Matrix &m )
    {
        return Matrix(2,2);
    }
};
int main()
{
    Matrix matrix(2,2);                           // some matrix
    Matrix m = Matrix::returnSomething ( matrix ) // I should use it that way
    m.print() // it shows the matrix       

    // but I can use it too that way //

    Matrix m;
    m.returnSomething ( matrix )                  // how to make this not allowed??
    m.print() // but here the matrix is NULL, wont show anything 
}
怎么做

编辑:


我添加了一些打印功能,可以显示问题所在

它不应该有什么区别。但是,可以使用名称空间而不是静态函数

namespace MatrixUtils
{
  Matrix returnSomething ( Matrix &m )
  {
     return Matrix(2,2);
  }
}

为什么不直接使用helper类呢

class MatrixHelper
{
public: 
    static Matrix returnSomething ( Matrix &m )
    {
        return Matrix(2,2);
    }
};
那么调用将是:

MatrixHelper::returnSomething ( matrix ) 

你混淆了两个问题。返回值“消失”,因为您没有将其分配给任何对象-这与您调用函数的方式无关

换言之,这两种方法都将起作用:

Matrix matrix(2, 2);
Matrix m = Matrix::returnSomething(matrix);
Matrix m2 = m.returnSomething(martix);
而这两者都会使返回值“消失”:


你为什么要这样?因为当我忘了一次,我用m.returnSomething代替了Matrix::returnSomething,它不起作用了,你说它不起作用是什么意思?为什么它不起作用?完全一样。你想解决什么具体问题?也许你可以提供一些代码来说明这个问题。你的问题不是在实例上调用静态成员函数,而是在一种情况下,你将结果分配给
m
,而在另一种情况下,你没有。是的,我知道,我只是想保护它不受我自己或其他人的影响。有一次我忘了它,写了m.returnSomething(),我会花一整天的时间来寻找小号在哪里。我要问一个问题,看看这行:
Matrix m2=m.returnSomething(martix)。这句话是对的,但你不认为它毫无意义吗?对于其他矩阵,我应该使用
m
对象,而不是
Matrix m2=Matrix::returnSomething(Matrix)
?@Tom,这就是语言的工作原理。如果您真的想禁止这种情况,请将静态成员函数放在其他位置(命名空间或其他类)非常感谢。