使用 scope 运算符 (::) 引用另一个文件中的类
referring to a class from another file with the scope operator (::)
我有一个main.cpp
文件,开头有#include "engine.h"
。
里面engine.h
有
#include "myObject.h"
namespace nmspc{
MyObject obj1;
//some code here
}
myObject.h
有:
#include <iostream>
class MyObject{
public:
void helloWorld(){
std::cout << "Hello, World!" << std::endl;
}
}
为什么我不能在我的main.cpp
中提到这样的东西?
int main{
nmspc::obj1::helloWorld();
return 0;
}
相反,我必须键入nmspc::obj1.helloWorld()
或MyObject::helloWorld()
。但我想使用上面的那个。
可以使用静态成员函数执行类似操作,方法是在方法声明之前添加关键字static
。 如果这样做,该函数将不会与类的实际实例化相关联,因此无法访问任何成员变量或非静态成员函数。
通常,您不会通过创建的对象访问静态成员函数,而是通过类名访问静态成员函数(尽管可以通过实例调用它(。
class MyObject{
public:
static void helloWorld() {
std::cout << "Hello, World!" << std::endl;
}
}
int main{
MyObject::helloWorld();
return 0;
}
是否应该这样做取决于上下文。你的程序很简单,目前还不清楚为什么你会把它变成一个静态成员函数,而不是一个自由函数,但我不确定我是否有足够的上下文来提供建议。
所有
不正确的标头内容中的第一个
#include "myObject.h"
namespace nmspc{
MyObject obj1;
//some code here
}
这应该在 cpp 模块中,即:一个翻译单元
,因为它是一个实例化,即一个dynamic related
的东西(运行时影响代码(
而标头是所有静态相关内容的位置
如果想写MyObject::helloWorld((
可以在这里
myObject.h :
#include <iostream>
namespace nmspc{
class MyObject{
public:
void helloWorld();
};
MyObject::helloWorld(){
std::cout << "Hello, World!" << std::endl;
}
}
因为::
(作用域解析操作(是名称空间或类/结构所指的,
例如nmspc::MyObject::helloWorld
可能是类helloWorld
类MyObject
属于nmspc
名称空间可能是helloWorld
类属于MyObject
名称空间属于nmspc
命名空间。 等
int main{
MyObject obj1;
//some code here
nmspc::obj1.helloWorld();
return 0;
}
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- C++ 如何打开带有另一个目录的输入文件?
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 如何在另一个 CPP 文件中使用一个 cpp 文件中的函数?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 使用命名空间在另一个".cpp"文件中定义
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?