任何想法为什么不编译:
(ns clj.core
(:import
(com.ibm.watson.developer_cloud.conversation.v1 ConversationService)
(com.ibm.watson.developer_cloud.conversation.v1.model MessageRequest)
(com.ibm.watson.developer_cloud.conversation.v1.model MessageResponse)))
(let [username "foo"
password "bar"
input "hello"
context {}
workspaceId "ibm-watson-id"
service (ConversationService. "2017-08-26")
userPass (.setUsernameAndPassword service username password)
;just wanna make it work
msgReq (MessageRequest$Builder.)
inputText (.inputText msgReq input)
content (.context inputText context)
newMessage (.build content)
response (.execute (.message service workspaceId newMessage))]
(println "Watson Response: " response))
我明白了:
错误:没有用于初始化'B'B b = createB();
的匹配构造函数
此外,对于此示例,是否有更好的方法来保持对象的向量?请注意,我故意在函数中创建对象,以便在销毁B之前删除传递给B类的对象。在这种情况下,引用包装器不起作用,因为它指向已经删除的对象。我尝试通过引入unique_ptr来解决这个问题,但后来我遇到了这个错误。
答案 0 :(得分:3)
B
不可复制,因为它包含不可复制的std::vector<std::unique_ptr<A>>
。
您的“复制构造函数”实际上不是复制构造函数。将其更改为:
B(const B & b ) {
for( const std::unique_ptr< A >& val: b.m_Array ) {
m_Array.push_back( std::unique_ptr< A >( new A( *val ) ) );
}
}
const B& b
代替参数<{li>中的B& b
const std::unique_ptr<A>& val:
代替std::unique_ptr<A>& val:
B
生成复制构造函数,createB
作为临时函数返回的类型不能绑定到非const引用。答案 1 :(得分:-1)
如果您想要移动&#34;手动创建课程。他们,然后你可以移动指针。由于您有不可移动的对象,因此无法移动它们,但您可以移动它们的指针,但您必须使用new
或malloc
手动分配它们,以便在以下位置删除对象功能范围createB()
的结束。
你手动创建这样的类:
B *pointerToB = new B;
在您的代码中:
B createB() {
B *b = new B;
A a1;
A a2;
b->add( a1 );
b->add( a2 );
return b;
}
int main() {
B *b = createB();
A& temp = b->get( 1 );
temp.play();
delete b; // Do not forget to delete manually allocated object !!
return 0;
}
最后你需要用指针删除对象:
delete pointerToB;