【问题标题】:How to access non member functions that are in a seperate file (.cpp) than main如何访问与 main 不同的文件 (.cpp) 中的非成员函数
【发布时间】:2014-07-30 21:27:12
【问题描述】:

所以我正在处理我的第一个多文件、非玩具、c++ 项目。我有一个代表多光谱图像的类以及随之而来的所有信息。

我的问题是如何使用磁盘中的文件来设计加载该类的程序部分和对象!

我认为我不需要为此开设课程。切换到功能性方法会更好地加载文件。这样,我可以只拥有一个源文件 (.cpp),其中包含我可以调用的函数,同时传递指向相关对象的指针,这些对象将由函数访问的文件更新。

我不认为我想使用静态函数?据我了解,它们(静态函数)用于访问类中的静态变量,不是吗?

如果我走功能路线,从main(),我如何访问这些功能?我假设我会在 main() 包含文件的开头包含函数 .cpp 文件。从那里我如何调用函数。我只是使用函数名称还是必须预先添加类似于在包含类然后调用其方法时必须预先添加的内容。

这是我尝试过的一些示例代码以及我得到的错误。

OpenMultiSpec.cpp

#include <iostream>

void test(){
    std::cout << "Test function accessed successfully" << std::endl;
}

main.cpp

int main(){

    test();

    return 1;
}

错误说“'test'没有在这个范围内声明”

【问题讨论】:

  • 因此,在 Eclipse 中,似乎我不必在具有 main() 的文件中“包含”function() .cpp 文件,但是,我如何访问这些函数?跨度>
  • 通常,您将它们的声明放在头文件中,并将其包含在需要调用函数的代码中。
  • 但这不是一门课吗?然后我必须实例化对象才能使用这些功能!
  • 您可以在头文件中声明一个非类函数,然后在 cpp 文件中实现。某物是否属于类的方面与您将其放在头文件或代码文件中的位置无关。
  • 如果您将函数或变量定义为全局的,那么您可以在 .cpp 文件中的任何位置访问这些函数,而无需引用任何类。现在,如果您想从另一个 .cpp 文件访问这些全局函数,那么您必须为包含全局函数的 .cpp 文件创建头文件。然后将头文件添加到您尝试调用这些全局函数的 .cpp 文件中。因为编译器会在你的main中查找这些全局函数的定义,如果找不到,就会在头文件中查找。

标签: c++ function static static-methods


【解决方案1】:

OpenMultiSpec.h

void test();

main.cpp

#include "OpenMultiSpec.h"
int main(){

    test();

    return 1;
}

【讨论】:

  • 所以我只想拥有一个文件,而不是两个。我应该“内联”.h 文件中的函数吗?
  • @aaronburns 不。您应该按照设计的方式使用 C++,并使用带有函数原型的 OpenMultiSpec.h 和带有函数代码的 OpenMultiSpec.cpp。头文件中的内联函数会增加编译时间。
  • @aaronburns 对于每个 .cpp 你应该有一个包含函数原型(和类接口)的 .h
【解决方案2】:

如果它们位于两个单独的文件中,并且在您的情况下,一个是标题,请使用

#include "OpenMultiSpec.h"

如果您决定只使用一个文件(如您上面的评论所述),则您的头文件不需要#include。只需在调用之前将函数声明放在任何位置即可。

#include <iostream>
void test() {
     std::cout << "Test function accessed successfully" << std::endl;
}

int main() {

    test();

    return 1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2013-12-26
    • 1970-01-01
    • 2016-08-28
    • 2021-10-31
    相关资源
    最近更新 更多