gpt4 book ai didi

c++ - 从其他文件C++的模板类调用静态方法

转载 作者:行者123 更新时间:2023-11-30 02:25:36 25 4
gpt4 key购买 nike

我想有一个类Sorings,在类中通过静态方法和模板实现一些排序方法。我读过here静态模板方法应该在 .h 文件中实现。这是我的代码:

排序.h

#ifndef SORTINGS_H_
#define SORTINGS_H_

template <class T>
class Sortings {
public:
static void BubbleSort(T a[], int len, bool increasing)
{
T temp;
for(int i = len-1; i >= 1; i--)
for(int j = 0; j<= i-1; j++)
if(increasing ? (a[j] > a[j+1]) : (a[j] < a[j+1])) {
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
};
};

#endif /* SORTINGS_H_ */

排序.cpp

#include "Sortings.h"
//empty?

练习.cpp

#include <iostream>
#include "Sortings.h"
int main() {
int a[6] = {4,5,2,11,10,16};
Sortings::BubbleSort<int>(a,6,true);
return 0;
}

但它返回以下错误:(这些行是这样的,因为我已经在 Practice.cpp 中注释了所有其余部分)

Description Resource    Path    Location    Type
'template<class T> class Sortings' used without template parameters PracticeCpp.cpp /PracticeCpp/src line 41 C/C++ Problem
expected primary-expression before 'int' PracticeCpp.cpp /PracticeCpp/src line 41 C/C++ Problem
Function 'BubbleSort' could not be resolved PracticeCpp.cpp /PracticeCpp/src line 41 Semantic Error
Symbol 'BubbleSort' could not be resolved PracticeCpp.cpp /PracticeCpp/src line 41 Semantic Error

我不明白这是什么问题。你能帮我理解哪里出了问题:概念上或/和句法上吗?

我正在运行 Eclipse Neon.3 Release (4.6.3)

最佳答案

template <class T>
class Sortings {

模板参数适用于类,不适用于方法。所以你必须这样调用它 Sortings<int>::BubbleSort(a,6,true); .换句话说,没有名为 Sortings 的类型。 .相反,类型是 Sortings<int> .

你也不需要 Sortings.cpp因为一切都在头文件中。

虽然没有直接在问题中询问,但我认为您不需要在这里上课。命名空间内的简单模板化静态方法可以正常工作。像这样的东西:

namespace Sorting {

template<class T>
static void BubbleSort(T a[], int len, bool increasing) {
// ...
}

}

然后你可以调用Sorting::BubbleSort<int>(a,6,true)

关于c++ - 从其他文件C++的模板类调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44022065/

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