在类定义中的方法声明之前使用双冒号(::)

7Vo*_*yon 2 c++ oop msvc12

我有一个由第三方编写的课程,它有类似这样的Foo.h:

class Foo
{
public:
    int Foo::dosomething(float x, float y, float z);

    //Other things here
};
Run Code Online (Sandbox Code Playgroud)

在Foo.cpp中,dosomething是:

int Foo::dosomething(float x, float y, float z)
{    
    //Something
}
Run Code Online (Sandbox Code Playgroud)

什么是::标头中的函数名前是什么意思?当我创建一个新对象

Foo foo;
Run Code Online (Sandbox Code Playgroud)

我不能像这样访问dosomething函数:

foo.dosomething(1,2,3);
Run Code Online (Sandbox Code Playgroud)

dosomething是如何被访问的?当我在dosomething之前删除头文件中的::时:

class Foo
{
public:
    int dosomething(float x, float y, float z);

    //Other things here
};
Run Code Online (Sandbox Code Playgroud)

我可以从类型为Foo的对象访问dosomething.

Cor*_*mer 5

这是不正确的(和许多编译器认为这是一种错误)的范围内添加到函数名称的类定义.由于它已经在类的范围内,因此您实际上是将函数作用域定义Foo::Foo::dosomething为错误.

class Foo
{
public:
    int Foo::dosomething(float x, float y, float z);   // Shouldn't have Foo::
};
Run Code Online (Sandbox Code Playgroud)

要回答你的问题::,它指定了函数的范围.考虑这两个功能

int dosomething(float x, float y, float z);
int Foo::dosomething(float x, float y, float z);
Run Code Online (Sandbox Code Playgroud)

第一个是自由函数,后者是Foo类的一个方法,并且(因为它之前没有单词static)需要一个Foo要调用的实例.