Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回对象时使用Visual Studio下划线方法 我使用VisualStudio 2010 Engestand我想创建一个类来读取C++中的INI文件。这对我来说并不难,但当它返回一个对象的引用时,可视化下划线方法对我来说是不清楚的,所以我需要一些帮助_C++_Object_Methods_Reference_Return - Fatal编程技术网

返回对象时使用Visual Studio下划线方法 我使用VisualStudio 2010 Engestand我想创建一个类来读取C++中的INI文件。这对我来说并不难,但当它返回一个对象的引用时,可视化下划线方法对我来说是不清楚的,所以我需要一些帮助

返回对象时使用Visual Studio下划线方法 我使用VisualStudio 2010 Engestand我想创建一个类来读取C++中的INI文件。这对我来说并不难,但当它返回一个对象的引用时,可视化下划线方法对我来说是不清楚的,所以我需要一些帮助,c++,object,methods,reference,return,C++,Object,Methods,Reference,Return,我有两节课。一个是Tokenizer,它读取.ini文件,第二个是Token,它表示一个类似于[Somethink]的令牌 在Tokenizer中,我创建了一个方法,在ini文件中找到新标记时,将新标记添加到std::list Token Tokenizer::addToken(string name){ Token newToken(name); data.push_back(newToken); return newToken; } 我需要该引用,以便稍后向其添加p

我有两节课。一个是Tokenizer,它读取.ini文件,第二个是Token,它表示一个类似于[Somethink]的令牌

在Tokenizer中,我创建了一个方法,在ini文件中找到新标记时,将新标记添加到std::list

Token Tokenizer::addToken(string name){
    Token newToken(name);
    data.push_back(newToken);
    return newToken;
}
我需要该引用,以便稍后向其添加pairs key->value。这是令牌的构造函数:

Token::Token(string tokenName){
    name = tokenName;
}
一切都应该正常,但事实并非如此。Visual Studio在上面代码中的addToken一词下面划线,表示:

错误:声明与“错误类型> 标记器::addToken(std::字符串名称)”

但宣言是正确的

Token Tokenizer::addToken(string name); 
类标记也被定义了,所以对我来说没有意义。有趣的是,当我将返回值的类型更改为VOID并删除返回指令时,一切都正常了


请帮忙。这是我第一次接触C++中的引用和对象编程。

你可能已经声明了类中的方法<代码>令牌< /C> >为< /P>
class Tokenizer
{
  ...
  void addToken(string);
  ...
}
您需要更改它以匹配实际的预期签名

编辑事实证明,这毕竟不是问题所在——本来可能是。下一次,更愿意从原始代码中发布一个最小的工作示例,而不仅仅是一些选定的引号

如果您显示更多的代码,这将更容易。使用我的心灵调试能力,我会猜测
令牌
是一个嵌套的类/结构。也就是说,你需要像这样定义它

Tokenizer::Token Tokenizer::addToken(string name){
     Token newToken(name);
     data.push_back(newToken);
     return newToken;
}
我猜名称空间限定为Tokenizer::Token(但可能需要其他内容)

注意另外,不需要完全限定嵌套类型(如果它们可以通过
标记器
在本地看到),以便

  • 方法参数
  • 方法体

只是返回类型需要完全限定,IIRC

您的令牌类应该在您的令牌化器类之前声明,这样才能工作。你在这么做吗?看起来您正在
使用名称空间std-尽量避免这种情况;如果存在类型问题,请在该命名空间的所有对象上使用
std::
前缀。是。这就是问题所在。我在类标记器下创建了类标记。在我交换了两个班之后,一切都开始正常了。谢谢你的帮助。不。我写到声明是Token-Tokenizer::addToken(字符串名)@如果这在你的类声明中,那就错了。它应该是
tokenaddtoken(std::string name)。我删除了标记器::但没有帮助。无论如何,正确的答案是你在我的问题下的评论。