如何声明函数在结果中具有字符序列?
我现在有这个:
#define _MAX_PATH 260
char * GetTempFileName(char fileName [_MAX_PATH]);
但结果应该是 char [_MAX_PATH] 类型
#include <array>
typedef std::array<char,_MAX_PATH> Path;
extern class Setts
{
char path [_MAX_PATH];
public:
Setts();~Setts();
Path getTempFileName(const Path &fileName);
} setts;
Setts::~Setts(){}
Path Setts::getTempFileName(const Path &fileName)
{
GetCurrentDirectory(_MAX_PATH, path);
strcat(path, "\\");
strcat(path, fileName);
return path;
}
这对我来说是个问题...
error C2143: syntax error : missing ';' before 'Setts::GetTempFileNameA'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2556: 'int Setts::GetTempFileNameA(Setts::Path)' : overloaded function differs only by return type from 'Setts::Path Setts::GetTempFileNameA(Setts::Path)'
真的不可能在 char 序列 char [_MAX_PATH] 中得到结果吗?这里的问题是,当我创建新类型 Path 时,所有依赖于 char [_MAX_PATH] 类型的条件函数都会导致项目中出现错误。
来自 g-makulik 的评论
path.data() ... data 看起来像某个函数是什么意思,这是做什么的?是否在函数结果保存到路径变量后进行评估?– user1141649 16 分钟前
g-马库利克:
It provides access to the std::array's underlying data (an array of char[260]). You can use it in other places to interface that array as well. –
我试图简化它,因为与项目的其余部分兼容:
settings.h:
#include <stdlib.h>
#include <iostream>
#include <array>
typedef char Path [_MAX_PATH];
extern class Setts
{
Path& path;
public:
Setts();~Setts();
Path& getTempFileName(const Path &fileName);
bool load();
Path& BasePath;
Path& ScenPath;
Path& TempPath;
#define DEL_TEMP_ON_EXIT 1;
Path& logname;
bool intense;
} setts;
设置.cpp:
#include <windows.h>
#include "settings.h"
#include <stdio.h>
Setts::~Setts(){}
Path& Setts::getTempFileName(const Path &fileName)
{
GetCurrentDirectory(_MAX_PATH, path);
strcat(path, "\\");
strcat(path, fileName);
return path;
}
bool Setts::load()
{
TempPath = getTempFileName("scendata.tmp");
logname = getTempFileName("ats_cache.log");
return (result == ERROR_SUCCESS);
}
现在我得到了错误:near TempPath = getTempFileName("scendata.tmp");
和logname = getTempFileName("ats_cache.log");
:
'Setts::getTempFileName' : 无法将参数 1 从 'const char [13]' 转换为 'const Path (&)' 原因:无法从 'const char [13]' 转换为 'const Path' 没有上下文这种转换是可能的 错误 C2664: 'Setts::getTempFileName' : cannot convert parameter 1 from 'const char [14]' to 'const Path (&)' 原因: cannot convert from 'const char [14]' to 'const Path ' 没有可以进行这种转换的上下文