主题标题实际上是我的问题.第二个问题是:我什么时候使用这两个?
我尝试将我的 C++ 应用程序链接到“Eigen 2.0.15”库。一些细节:
我用 g++ -I/opt/local/include -I/opt/local/include/eigen2 -O2 -g ...
Building target: LBRALL
Invoking: MacOS X C++ Linker
g++ -L/opt/local/lib -o "LBRALL" [... *.o -files ] -lcv -lEigen2 -lcxcore -lhighgui
错误是:
`Undefined symbols:
"Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<float, 4, 4, 2, 4, 4>, 3, 3, 1, 32> >::inverse() const", referenced from:
Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRSendStateCart.o
Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRCam.o
"Eigen::MatrixBase<Eigen::Matrix<float, 4, 4, 2, 4, 4> >::inverse() const", referenced from:
Eigen::Transform<float, 3>::inverse(Eigen::TransformTraits) constin LBRSendStateCart.o …Run Code Online (Sandbox Code Playgroud) 这是我的问题:
这段代码抛出一个java.util.ConcurrentModificationException,因为在Vector listeners存在Iterator这个数据结构时会被修改.java-doc说这个容器只提供一个快速失败的迭代器.
如果在"生命" 期间删除了一个元素,是否有可能获得Iterator像Java Vector或ListJava那样的标准容器Iterator,它不会失效(不是快速失败)Iterator?
我应该像std::list在C++中一样具有相同的行为.即使删除了当前的迭代器,迭代器也始终有效.比迭代器设置为列表中的下一个元素.
public class ClientHandle {
private final Vector<ClientHandleListener> listeners = new Vector<ClientHandleListener>();
public synchronized void addListener(ClientHandleListener chl) {
listeners.add(chl);
}
public synchronized void removeListener(ClientHandleListener chl) {
listeners.remove(chl);
}
private void fireConnectionClosed() {
final ClientHandle c = this;
final Iterator<ClientHandleListener> it = listeners.iterator();
new Thread(){
@Override
public void run() {
while (it.hasNext()) {
it.next().connectionClosed(c); //FIXME the iterator gets …Run Code Online (Sandbox Code Playgroud) c++ ×2
eigen ×1
fail-fast ×1
gcc ×1
iterator ×1
java ×1
linker ×1
macos ×1
managed-c++ ×1
visual-c++ ×1