1

如果我有这个泛型方法,其中Foo使用派生的参数返回类型对象string s

Foo createFoo(string s)
{
    int index, first, second, third, fourth, fifth;

    Foo fooName(int first, int second,int third,int fourth,int fifth);
    return fooName;
}

然后主要是,我尝试做这样的事情:

Foo newFoo = createFoo(argv[2]);

为什么编译器会给我这个错误?

file.cc:30:1:错误:'Foo' 没有命名类型 file.cc:在函数中
'int main(int,char**)':file.cc:180:38:错误:'createFoo'不是
在此范围内声明

来自Java,做这样的事情通常不会给我带来任何问题,为什么这会成为C++的问题?我该如何解决这个问题?

编辑 1:一些建议询问了我的Foo类定义的位置。它位于createFoo方法之后,所以我将方法移到代码createFooFoo类定义段之后并尝试编译。现在出现一个新错误:

file.cc:在函数'Foo createFoo(std::string)'中:file.cc:153:9:
错误:从 'Foo (*)(int, int, int, int, int)' 转换为
请求的非标量类型“Foo”
4

4 回答 4

0

该语句return fooName;正在返回函数fooName,我认为您打算返回函数调用的结果,它应该类似于return fooName(first, second, third, fourth, fifth);

于 2012-04-24T01:39:22.517 回答
0

Mert 对我的方法位置的质疑是正确的。方法代码块应该位于文件中的 Foo 类定义位置之后。

于 2012-04-25T17:13:40.013 回答
0

您没有包含定义“Foo”的标头,或者您忘记添加 using 指令以将其从定义它的名称空间中拉入。

于 2012-04-23T23:12:27.733 回答
0

关于您的第二个错误,转换之一:

Foo fooName(int first, int second,int third,int fourth,int fifth);

您打算创建新的对象实例,将一些参数传递给对象构造函数。但是你最终会声明一个新函数。从参数中删除类型名称(“int”)以解决此问题。

您还应该知道最令人头疼的 parse

于 2012-05-04T10:52:24.827 回答