我有以下程序:
#include <iostream>
#include <stdexcept>
#include <string>
using namespace std;
class MyError : public runtime_error
{
public:
MyError(string mess = "");
~MyError(void);
};
MyError::MyError(string mess) : runtime_error(mess)
{
cout << "MyError::MyError()\n";
}
MyError::~MyError(void)
{
cout << "MyError::~MyError\n";
}
int main(void)
{
try {
throw MyError("hi");
}
catch (MyError& exc) {
cout << exc.what() << endl;
}
cout << "goodbye\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中打印以下内容:
MyError::MyError()
MyError::~MyError
hi
MyError::~MyError
goodbye
Run Code Online (Sandbox Code Playgroud)
为什么异常的析构函数(~MyError())被调用两次?
我假设throw创建了一个新对象,但我不明白为什么要调用类析构函数.
操作系统:Windows 8.1
编译器:GNU C++
我有两个模板类:base和derived.在基类中我声明了变量value.当我尝试value从派生类的方法应用时,编译器向我报告错误.但如果我不使用模板,我不会收到错误消息.
有错误消息:
main.cpp: In member function 'void Second<T>::setValue(const T&)':
main.cpp:17:3: error: 'value' was not declared in this scope
value = val;
^
Run Code Online (Sandbox Code Playgroud)
有代码:
#include <iostream>
using namespace std;
template<class T>
class First {
public:
T value;
First() {}
};
template<class T>
class Second : public First<T> {
public:
Second() {}
void setValue(const T& val) {
value = val;
}
};
int main() {
Second<int> x;
x.setValue(10);
cout << x.value << endl;
return …Run Code Online (Sandbox Code Playgroud) 我必须解析一个可以有两种类型的 XML 文件:
<property>
<value>Some text</value>
</property>
Run Code Online (Sandbox Code Playgroud)
和
<property>
<value>
<item id="first_id"/>
<item id="second_id"/>
<item id="third_id"/>
</value>
</property>
Run Code Online (Sandbox Code Playgroud)
我怎样才能用Java做到这一点?
我创建了一个类:
@Root(strict = false)
public class PropertyValue {
@ElementList(inline = true, required = false)
private List<ItemData> items;
@Text(required = false)
private String text;
}
Run Code Online (Sandbox Code Playgroud)
ItemData是item阶级。
但这是行不通的。该代码给了我一个例外:
org.simpleframework.xml.core.TextException: Text annotation @org.simpleframework.xml.Text(data=false, empty=, required=false) on field 'text' private java.lang.String PropertyValue.text used with elements in class PropertyValue
Run Code Online (Sandbox Code Playgroud) 我有3个课程:Main,Caller和CallMe.调用者实现了Runnable.我向Calller constuctor 传递一个指向CallMe实例的指针,以及一条消息,Caller传递给CallMe实例的方法,打印消息.接下来,我开始一个线程.
在Main中我创建了3个Caller和I 实例,除了它将在这里打印:
[Welcome]
[to synchronized]
[world!]
Run Code Online (Sandbox Code Playgroud)
但我得到以下结果:
[Welcome]
[world!]
[to synchronized]
Run Code Online (Sandbox Code Playgroud)
为什么?
有代码:
Main.java
public class Main {
public static void main(String[] args) {
CallMe target = new CallMe();
Caller ob1 = new Caller(target, "Welcome");
Caller ob2 = new Caller(target, "to synchronized");
Caller ob3 = new Caller(target, "world!");
try {
ob1.thread.join();
ob2.thread.join();
ob3.thread.join();
} catch (InterruptedException …Run Code Online (Sandbox Code Playgroud)