【发布时间】:2018-07-06 02:13:51
【问题描述】:
我在 SO 上看到了一些涉及此问题的问题,但我似乎遇到了一个独特的问题。
我正在尝试创建一个对象,然后在我的代码中的其他地方进行一些初始化,并在完成之后调用构造函数。为此,我创建了一个指向对象实例的智能指针,然后将其重置:
#include "relevantHeaders.h"
using namespace std;
int main(int argc, char *argv[])
{
std::unique_ptr<MyObject> obj;
if(someCondition){
// Do stuff
obj.reset(new MyObject(stuff));
}
doOtherStuff(obj);
}
我需要这样做的原因是因为obj 在我调用构造函数的条件之后继续使用 - 如果我要在正常调用中在条件下创建对象,那么它稍后将超出范围。
首先,经过一些研究,这在我看来是最好的方法。想法?
其次,我在编译时遇到这个错误:
The text ">" is unexpected. It may be that this token was intended as
a template argument list terminator but the name is not known to be a
template
这是什么意思?
编辑:由于每个人都高度关注relevantHeaders.h,所以让我这样说...以下(伪)代码可以正常工作:
#include "relevantHeaders.h"
using namespace std;
int main(int argc, char *argv[])
{
MyObject obj;
if(someCondition){
// Do stuff
// obj.reset(new MyObject(stuff));
}
doOtherStuff(obj);
}
也就是说,我可以使用MyObject 就好了。当我添加 std 实用程序 unique_ptr 时它会中断。
【问题讨论】:
-
"relevantHeaders.h"实际上是什么?请提供minimal reproducible example 而不是伪造代码! -
“有问题的代码很长” 这就是为什么我要求提供一个 minimal 示例来重现您的问题.您想要基于猜测的答案吗?
-
@Anonymous:“我说我没有看到为我的问题制作一个完整的工作(但最小)示例的价值。” - 然后这个问题在 Stack Overflow 上是题外话。我们需要能够将您的代码复制并粘贴到编辑器中并运行编译器,而无需编辑一行。
-
回复:“这是什么意思?” -- 表示
"relevantHeaders.h"有问题。如果你拒绝谈论那个标题的内容,没人能告诉你真正的问题是什么。 -
@Anonymous:“不,这绝对是荒谬的。” - Stack Overflow 不同意你的观点。实际上,不仅是 Stack Overflow。在 Usenet 时代,此类问题的答案曾经是“我没有水晶球”。在 SO 上对一个问题进行近距离投票只是现代的等价于发布这样的回复。 “您在回答这个包含不可运行代码的问题时没有问题:” - 如果只缺少
#include <iostream>或#include <string>行,那么我有时(太?)慷慨。
标签: c++ oop object constructor