gpt4 book ai didi

C++:由于模板类中的 typedef 返回类型,在错误之前奇怪地缺少 ';'

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

在构建以下测试代码时,我遇到了一个非常令人困惑的编译器错误。

f:\data\sdks\smctc-1.00\examples\ik_pf\msvc\MarkerSampler.inl(16): error C2143: syntax error : missing ';' before 'MarkerSampler<MarkerT>::sample2'
f:\data\sdks\smctc-1.00\examples\ik_pf\msvc\MarkerSampler.inl(16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

注意示例构建没有错误,但 sample2 导致了问题。唯一的区别是一个不使用 typedef 明确详细说明返回类型,另一个使用 typdef'ed 版本。

.h文件

#pragma once
#ifndef __MARKERSAMPLER_H_INCLUDED__
#define __MARKERSAMPLER_H_INCLUDED__

#include <vector>
#include <string>

#include <qthread.h>

#include <Wm5Vector3.h>
#include "UtilityFunctions.h"
#include "Marker.h"
#include "MarkerSet.h"

template <class MarkerT>
class MarkerSampler : public QThread
{


typedef std::vector<MarkerT> MarkerVector ;
typedef MarkerSet<MarkerT> MarkerSetT ;
typedef std::vector<MarkerSetT> MarkerSetVector ;

public :

MarkerSampler(const std::string inputDataDirectory, const unsigned int nSamples, const unsigned int startFrame, const unsigned int nFramesToUse) :
inputDataDirectory_(inputDataDirectory), nSamples_(nSamples), startFrame_(startFrame), nFramesToUse_(nFramesToUse) {seed = -time(NULL) ;}

~MarkerSampler() {}

std::vector<MarkerSet<MarkerT> > sample(const double scaleFactor = 1.0, const double noiseSD = 0.0) ;

MarkerSetVector sample2(const double scaleFactor = 1.0, const double noiseSD = 0.0) ;

protected:
void run();

private:

int seed ;

const std::string inputDataDirectory_ ;
const unsigned int nSamples_ ;
const unsigned int startFrame_ ;
const unsigned int nFramesToUse_ ;


} ;

#include "MarkerSampler.inl"

#endif

.inl文件

template <class MarkerT>
std::vector<MarkerSet<MarkerT> > MarkerSampler<MarkerT>::sample(const double scaleFactor, const double noiseSD)
{
....
}

template <class MarkerT>
MarkerSetVector MarkerSampler<MarkerT>::sample2(const double scaleFactor, const double noiseSD)
{
....
}

最佳答案

失踪;该错误的一部分有点误导,编译器实际上只是不识别 MarkerSetVector 类型。我认为这是因为它是 MarkerSampler 类中的类型定义。

如果您明确说明 typedef 的范围,它应该可以修复错误。尽管(至少取决于您的编译器)您可能还需要添加 typename 关键字,因为 MarkerSetVector 是一个依赖类型。这是一个固定的例子:

template <class MarkerT>
typename MarkerSampler< MarkerT >::MarkerSetVector MarkerSampler<MarkerT>::sample2(const double scaleFactor, const double noiseSD)
{
....
}

关于C++:由于模板类中的 typedef 返回类型,在错误之前奇怪地缺少 ';',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9702859/

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