c++ - 从 header 中的类实例化对象

标签 c++ header-files instantiation

我有一个 multiple defintion of Math 错误,没有文件来解释以下代码的原因:

#ifndef SOMEMATH_H
#define SOMEMATH_H

class math{
public:
    int add( int a, int b);
    int divide(int a, int b);
    int subtract(int a, int b);
    int multiply( int a, int b);
}Math;

#endif // SOMEMATH_H

Math 更改为任何其他名称都不会改变问题。以不同的方式实例化数学对象并不能解决问题。不在头文件中创建 math 对象不会造成任何问题,但我想要在头文件中创建一个类。这可能吗?

最佳答案

您的 header 定义了一个名为 Mathclass math 实例,这是个坏主意,因为它会导致您遇到的问题:如果两个文件包含 header ,您会得到两个同名的实例。

您不能像这样在 header 中安全地创建类的实例。您可以声明一个存在,并将实际的定义放在.cpp源文件中。

这个特定的类看起来只有方法,没有与之关联的实际数据。这让我想知道你到底想做什么。如果您只是将一组函数捆绑在一个名称下,您可能会考虑使用 namespace,或者至少将函数设为 static 类下的方法:

class Math {
public:
    static int add( int a, int b);
    static int divide(int a, int b);
    static int subtract(int a, int b);
    static int multiply( int a, int b);
};

或:

namespace Math
{
    int add( int a, int b);
    int divide(int a, int b);
    int subtract(int a, int b);
    int multiply( int a, int b);
}

这两个选项中的任何一个都可以让您免于需要一个类的实例来访问该功能。您可以将这些函数称为 Math::add()Math::divide() 等。

关于c++ - 从 header 中的类实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20733137/

相关文章:

c++ - 在 C++ 问题中使用 cin.get() 获取用户输入

c++ - 使用传入参数在 C++ 中创建 3D 数组

c++ - 检测堆栈损坏

c++ - 如何将一个包含的头文件从一个项目包含到另一个项目? VS2008

在带有 header 的 Mac 终端中编译 C 文件

c++ - std::variant of template specializations 转换 move 构造函数

C通过makefile一次性实现文件

c++ - 分析模板元程序编译时间

C++,同一类中的类实例,类中的父/子结构

Javascript 原型(prototype)实例化与伪经典实例化