我正在尝试通过让cmake为我编译它来简化大型项目,但是我在编译boost单元测试时遇到了问题.我的简单示例的cmake文件如下所示.
cmake_minimum_required(VERSION 2.8)
find_package(Boost COMPONENTS system filesystem REQUIRED)
add_excecutable(testTheTester boostTester.cpp)
target_link_libraries(testTheTester ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY})
add_test(tester tester)
Run Code Online (Sandbox Code Playgroud)
而boostTester.cpp中的代码是:
#define BOOST_TEST_MAIN
#if !defined( WIN32 )
#define BOOST_TEST_DYN_LINK
#endif
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE( la ) {
BOOST_CHECK_EQUAL(1, 1)
}
Run Code Online (Sandbox Code Playgroud)
现在这个cpp代码将编译并运行正常,如果我手动构建它:
g++ boostTester.cpp -o output -lboost_unit_test_framework
Run Code Online (Sandbox Code Playgroud)
并且cmake工作正常,但是当使用输出make文件时,make崩溃时会出现大量错误,其中第一个是:
undefined referance to 'boost::unit_test::unit_test_log_t::set_checkpoint(boost... bla bla
Run Code Online (Sandbox Code Playgroud)
现在我最初的想法是cmake没有正确链接boost库,我尝试了许多命令和组合,没有运气.有谁知道如何在cmake文件中链接boost_unit_test?
在关于C++的书籍中,当我们在C++中使用模板时,为什么我们会教我们使用函数重载?
展示模板的有效(和正确)使用不是更好吗?与大多数C++书籍中教授函数重载的地方相反?
或者,是否有充分的理由使用一个而不是另一个?
我找到了一种方法来更改用户的默认主目录,但我遇到了问题.



这样做会将主驱动器更改为C:
但是当我检查环境变量时:

它仍然是H :,系统重启时,Windows设置中的Enviroment变量也将返回H:/
我也尝试过这样更改:

这似乎工作,但如果我打开一个新的cmd它将恢复为H:/
现在我试图这样做,以便OpenSSH将C识别为我的主目录而不是H:这是一个网络驱动器,迫使OpenSSH无法工作,除非我通过VPN连接到我的大学网络.
我可以做些什么来永久地设置这个并且在OpenSSH的眼中?
没有快速找到答案,我可以在堆栈上看到这个问题,所以我想我会添加一个.
假设我有来自c ++ Eigen Library的以下示例代码:
Eigen::Matrix4d m1;
Eigen::Matrix4f m2;
m1 << 1, 2, 3, 4 ... 16
m2 = m1; //Compile error here.
Run Code Online (Sandbox Code Playgroud)
我在最后一行得到一个编译错误,归结为:
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
Run Code Online (Sandbox Code Playgroud)
什么是解决这个问题的简单方法?
请考虑以下代码段:
auto f() { return void({}); }
int main() { f(); }
Run Code Online (Sandbox Code Playgroud)
什么是完全{}的void({})?
怎么解释?
当然,只是出于好奇.不管怎样,让我们走得更远.
请注意,GCC 6.1和clang 3.8都编译它没有错误(-std=c++14 -pedantic).
后者没有抱怨,前者显示警告:
警告:非类类型的list-initializer不能带括号
使用-pedantic-errors替代,GCC有错误而铛编译结束.
这种差异是否是两个编译器之一的错误?
我的意思是,它是否应该被接受的有效代码?
我今天注意到在示例代码中:
void print(unsigned short a) {
std::cout << a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
初始化和使用的工作方式如下:
print(short (5));
Run Code Online (Sandbox Code Playgroud)
但不是这样的:
print(unsigned short(6));
Run Code Online (Sandbox Code Playgroud)
main.cpp:16:8:错误:在'unsigned'打印之前预期的primary-expression(unsigned short(6));
并且它与该类型无关,因为这也有效:
typedef unsigned short ushort;
print(ushort (6));
Run Code Online (Sandbox Code Playgroud)
所以我去搜索标准关于值初始化的内容.事实证明:
值初始化的效果是:
1)如果T是类型...
2)如果T是非联盟类型......
2)如果T是类型...
3)如果T是数组类型,..
4)否则,对象是零初始化的.
为便于阅读而进行的修改. 原始来源.
有关POD类型值初始化的规则是什么?unsigned合格类型无法初始化的原因是什么?这更多地与他们的事实有关rvalues吗?
最近出现在以下示例中的代码审查中:
enum class A : uint8_t
{
VAL1, VAL2
};
...
std::vector<A> vOfA; // Assume this is sized and full of some stuff.
std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A));
Run Code Online (Sandbox Code Playgroud)
我们应该使用sizeof(std::underlying_type<A>::type)而不是sizeof(A). 这些有可能会有所不同吗?有人有标准报价来保证这一点吗?
问题
我有一张从摆动车上拍下来的照片.为简单起见,我将其转换为黑白图像.一个例子如下所示:

图像显示高强度返回并且在其中具有图案,发现所有有效图像都以红色圈出.该图像可以根据车辆的旋转从多个角度拍摄.另一个例子是:

这里的目的是尝试识别存在该模式的图像单元.
当前的方法
到目前为止,我已经尝试了几种方法,我使用Matlab进行测试,但最终将在c ++中实现.期望算法是时间有效的,但是,我对任何建议感兴趣.
SURF(加速鲁棒特征)特征识别
我尝试了SURF的默认matlab实现来尝试查找功能.Matlab SURF能够识别2个示例中的特征(与上面不同)但是,它无法识别常见的:

我知道点数不同但模式仍然有些可识别.我尝试了多套图片,几乎没有共同点.从阅读关于SURF看来,无论如何它对于倾斜的图像似乎都不健壮. 也许这里有一些关于预处理的建议?
模板匹配
因此尝试了模板匹配,但对于应用程序来说绝对不是理想的,因为它不适合缩放或偏斜变化.我愿意预先处理想法来解决这个问题.这可能非常简单,关于图片的额外信息的一些讨论将进一步提供.
现在让我们调查模板匹配:假设我们有以下两个图像作为模板和当前图像:

模板选自最前向的图像之一.在非常相似的图像上使用它我们可以匹配位置:

但是(然而有些明显)如果我们将图片改变为不同的角度,它将无法工作.当然我们期望这样,因为模板不再像图像中的模式:

所以我们显然也需要一些预处理工作.
Hough Lines和RANSAC
霍夫线和RANSAC可能能够为我们识别线,但是我们如何获得模式位置?
其他我还不知道的
我对图像处理场景很陌生,所以我很想听听任何其他技术,以适应这个简单但困难的图像记录问题.
传感器及其如何帮助预处理
传感器是一个3D激光器,它已经变成了这个实验的图像,但仍然保留了它的距离信息.如果我们使用从0到255的距离缩放绘制,我们得到以下图像:

更轻的地方.这绝对可以帮助我们调整图像,一些关于最佳方式的想法?.到目前为止,我已经想过计算非0的单元格的正常情况,我们也可以做一些梯度下降或最小二乘拟合,使得距离的差异为0,这可以使图像对齐以便它永远是直的.问题是白色条纹是否更远?也许我们可以将其细分?我们在算法上构建算法,所以我们需要小心,这样就不会成为怪物.
任何帮助或想法都会很棒,我很乐意调查任何严肃的答案!
我一直在研究可能使用MPC5200静态RAM空间作为便笺式存储器.我们有16Kb未使用的内存出现在处理器总线(源)上.
现在一些重要的实施说明是:
这个存储器由BestComm DMA控制器使用,在RTEMS此基本上将在SRAM的开始处设置一个任务表,其中包含一组16个任务,可以作为外设接口,I2C,以太网等的缓冲区运行.为了使用这个空间没有冲突并且知道我们的系统只使用大约2Kb的以太网驱动程序缓冲区,我将SRAM的起始偏移了8Kb,所以现在我们知道8Kb的内存不会被系统使用.
RTEMS 定义一个指向静态内存的数组,如下所示:
(来源)
typedef struct {
...
...
volatile uint8_t sram[0x4000];
} mpc5200_t;
extern volatile mpc5200_t mpc5200;
Run Code Online (Sandbox Code Playgroud)
我知道sram数组指向静态内存,因为当我编辑第一部分并打印出内存块(MBAR + 0x8000 源代码)时
所以从这里我可以说以下,我有RTEMS定义访问SRAM通道mpc5200.sram[0 -> 0x2000].这意味着我可以开始对我可以摆脱它的速度进行一些测试.
为了评估速度,我设置了以下测试:
int a; // Global that is separate from the test.
**TEST**
// Set up the data.
const unsigned int listSize = 0x1000;
uint8_t data1[listSize];
for (int k = 0; k < …Run Code Online (Sandbox Code Playgroud) 我想知道Header文件(如在MyHeader.hpp中)和namespacein中的确切区别c++?
c++ ×9
casting ×2
boost ×1
c++14 ×1
clang ×1
cmake ×1
cmd ×1
eigen ×1
gcc ×1
header-files ×1
matlab ×1
matlab-cvst ×1
namespaces ×1
overloading ×1
powerpc ×1
rtems ×1
syntax ×1
templates ×1
windows ×1