gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:19:33 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com