小编gio*_*adi的帖子

CMake无法在OSX上使用C++ 11

我刚刚升级到Mountain Lion,所以我可以在xcode附带的新版Clang上使用一些C++ 11特性.我正在使用Homebrew的cmake 2.8.9.

我做了一个非常简单的CMake项目,它为C++ 11添加了编译器标志:

# CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_executable(test test.cxx)
add_definitions(-std=c++0x -stdlib=libc++)
Run Code Online (Sandbox Code Playgroud)

test.cxx中的C++代码如下:

#include <iostream>

int main()
{
  std::cout << "Howdy" << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行cmake和make时,文件编译得很好,但链接器输出以下错误:

Linking CXX executable test
Undefined symbols for architecture x86_64:
  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test.cxx.o
  "std::__1::ios_base::getloc() const", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test.cxx.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::put(char)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in …
Run Code Online (Sandbox Code Playgroud)

c++ macos cmake c++11

10
推荐指数
3
解决办法
1万
查看次数

为什么不将clang或gcc标记为从double到int的隐式转换?

请考虑以下代码:

void f(int x)
{
    std::cout << x << std::endl;
}

int main()
{
    double x = 1.5;
    f(x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这编译并运行时没有任何警告(使用-Wall),因此隐藏了从double到int的危险隐式转换.如果使用文字调用函数,编译器将捕获强制转换,即

f(1.5)
Run Code Online (Sandbox Code Playgroud)

但这并不是那么有用.为什么这些编译器没有为这个演员发出警告?我在OSX 10.8.3上使用gcc-4.2.1和clang-425.0.28.

c++ gcc clang implicit-conversion

7
推荐指数
1
解决办法
2711
查看次数

使用Data.Tree.Zipper遍历玫瑰树

我有一个玫瑰树结构,我用Data.Tree表示.树中的每个节点都标有(x,y)坐标.我需要实现一种方法,在树中找到最接近给定查询坐标的节点,并将子节点添加到该节点.

我设想将其分为两个操作:

  1. 遍历树以查找最接近给定查询坐标的节点

  2. 获取在先前遍历中找到的节点,并向其添加标有上述查询坐标的子节点

我能想到的唯一方法是使用Data.Tree.Zipper在步骤1中遍历树,然后在步骤2中使用该拉链在特定位置插入节点.

我有两个问题:

  • 这是解决问题的有效方法吗?

  • 如果是这样,我如何使用Data.Tree.Zipper中的函数来实现上面的步骤1?我发现树遍历很难实现,因为它需要两个维度的递归:深度和广度.

tree haskell

6
推荐指数
1
解决办法
1299
查看次数

意外地反向非二元函数会产生奇怪的行为

这是有问题的代码(也在lpaste.net上):

module Data.Graph.Dijkstra
       ( dijkstra
       , dijkstraPath
       ) where

-- Graph library import
import Data.Graph.Inductive hiding (dijkstra)

-- Priority queue import
import qualified Data.PQueue.Prio.Min as PQ

-- Standard imports
import Data.List (find)
import Data.Maybe (fromJust)
import Data.Monoid

-- Internal routine implementing Dijkstra's shortest paths
-- algorithm. Deemed internal because it needs to be kickstarted with
-- a singleton node queue. Based on FGL's current implementation of
-- Dijkstra.
dijkstraInternal ::
  (Graph gr, Ord b, Monoid b) => gr …
Run Code Online (Sandbox Code Playgroud)

haskell

4
推荐指数
2
解决办法
325
查看次数

Boost Graph Library A* 以实现一致的启发式

我读过,当将 A* 应用于问题时,如果您的启发式是一致的,那么您可以进一步优化 A* 搜索。Boost Graph Library 提供两个版本的 A* 算法:astar_searchastar_search_tree。该文档对于两者之间的区别不是很清楚;其中之一是否执行假设一致启发式的优化搜索?

boost a-star boost-graph

1
推荐指数
1
解决办法
955
查看次数

标签 统计

c++ ×2

haskell ×2

a-star ×1

boost ×1

boost-graph ×1

c++11 ×1

clang ×1

cmake ×1

gcc ×1

implicit-conversion ×1

macos ×1

tree ×1