【问题标题】:Call a function outside main () [duplicate]在main()之外调用函数[重复]
【发布时间】:2013-12-22 09:47:48
【问题描述】:

我正在尝试这样做:

#include <iostream>
using namespace std;

class smth {
  public:
  void function1 () { cout<<"before main";}
  void function2 () { cout<<"after main";}
};

call function1();

int main () 
{
  cout<<" in main";
  return 0;
}
call funtion2();

我想收到这条消息: “在主要之前” “主要” “在主要之后”

我该怎么做?

【问题讨论】:

  • 为什么要这么做?
  • call function1(); 更改为char call = (function1(), 0);
  • 你能解释一下你为什么要这么做吗?
  • 这是一个家庭作业,我只有 std::cout

标签: c++


【解决方案1】:

你不能。至少不是那样。您应该可以通过将代码放入类的构造函数和析构函数中,然后声明一个全局变量来解决它:

struct myStruct
{
    myStruct() { std::cout << "Before main?\n"; }
    ~myStruct() { std::cout << "After main?\n"; }
};

namespace
{
    // Put in anonymous namespace, because this variable should not be accessed
    // from other translation units
    myStruct myStructVariable;
}

int main()
{
    std::cout << "In main\n";
}

【讨论】:

  • 好的,它正在工作......但我不明白析构函数是如何被调用的。为什么要使用命名空间?我从不知道命名空间用于...
  • @FlaviusIbanescu 全局和静态变量在main 被调用之前被初始化,在main 返回之后被销毁。在匿名命名空间中拥有全局变量(就像我一样)相当于使全局变量static,即它们不是从当前翻译单元中导出的。
  • RT(用于运行时)库确实在程序退出时处理静态破坏。在 windows/visual studio 上,它是“msvcrtXX.dll”,其中“XX”是 Visual Studio 版本号。
  • @FlaviusIbanescu 命名空间通常用于范围界定。例如,所有标准库类和函数都在 std 命名空间中。这意味着您可以轻松地声明一个名为vector 的变量,并且它不会与std::vector 发生冲突。
  • 这很有帮助。非常感谢!
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2017-03-30
  • 2017-08-26
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多