我的项目构建都失败了,但我没有显示任何错误.我试过清洁和重建,但没有用.
我将MSBuild输出详细程度改为'Diagnostic',希望它能帮我识别问题,现在我卡住了.这是输出的样子:
1>Project 'ProjectMM.Data.Models' is not up to date. Input file 'C:\Projects\ProjectMM\ProjectMM.Data.Models\ProjectMM.Data.Models.csproj' is modified after output file 'C:\Projects\ProjectMM\ProjectMM.Data.Models\bin\Debug\ProjectMM.Data.Models.pdb'.
All packages are already installed and there is nothing to restore.
1>------ Build started: Project: ProjectMM.Data.Models, Configuration: Debug Any CPU ------
2>Project 'ProjectMM.Data' is not up to date. Input file 'C:\Projects\ProjectMM\ProjectMM.Data\ProjectMM.Data.csproj' is modified after output file 'C:\Projects\ProjectMM\ProjectMM.Data\bin\Debug\ProjectMM.Data.pdb'.
2>------ Build started: Project: ProjectMM.Data, Configuration: Debug Any CPU ------
3>Project 'ProjectMM' is not up to date. Input file 'c:\projects\projectmm\projectmm\app_start\bundleconfig.cs' is modified after output file …Run Code Online (Sandbox Code Playgroud) 这是测试程序:
void testFunc()
{
double maxValue = DBL_MAX;
double slope = std::numeric_limits<double>::quiet_NaN();
std::cout << "slope is " << slope << std::endl;
std::cout << "maxThreshold is " << maxValue << std::endl;
std::cout << "the_min is " << std::min( slope, maxValue) << std::endl;
std::cout << "the_min is " << std::min( DBL_MAX, std::numeric_limits<double>::quiet_NaN()) << std::endl;
}
int main( int argc, char* argv[] )
{
testFunc();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Debug中,我得到:
slope is nan
maxThreshold is 1.79769e+308
the_min is nan
the_min is 1.79769e+308
Run Code Online (Sandbox Code Playgroud)
在发布中,我得到:
slope …Run Code Online (Sandbox Code Playgroud) 我想知道 在qmake上使用CMake特定项目的原因,反之亦然.
两个构建系统的优点和缺点是什么?我搜索并找到了一些文件,但感觉很难理解.
我正在发现基于C++ 11范围的循环并且已经喜欢它了.它可以让您在编码时节省大量时间.
但是,我习惯于编写一些带有额外语句/条件的循环,并且我想知道这可以在使用C++ 11基于范围的循环时实现:
1.额外增量
std::vector<int> v = { 1, 2, 3, 4, 5 };
size_t index = 0;
for ( std::vector<int>::const_iterator iter = v.begin(); iter != v.end(); ++iter, ++index )
{
std::cout << "v at index " << index << " is " << *iter;
}
Run Code Online (Sandbox Code Playgroud)
可能成为:
size_t index = 0;
for ( int val : v )
{
std::cout << "v at index " << index << " is " << *iter;
++index;
}
Run Code Online (Sandbox Code Playgroud)
然而,增加index的for …
当在C中编写if-else语句时,是否有人会优先使用"等于"运算符而不是"不等于",而两者都可以产生相同的结果?
下面的代码提供了上下文.因此,如果参数计数等于2,则将从用户检索字符串.但是,如果获得任何其他参数值,则会显示错误消息.
int main(int argc, string argv[])
{
string msg;
if (argc == 2)
{
msg = GetString();
}
else
{
printf("ERROR: Please only enter a single key! \n");
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但是,通过将if-else循环的条件更改为"not equals to",并翻转相关的操作,我可以实现与上述完全相同的结果.见下文:
int main(int argc, string argv[])
{
string msg;
if (argc != 2)
{
printf("ERROR: Please only enter a single key! \n");
return 1;
}
else
{
msg = GetString();
}
Run Code Online (Sandbox Code Playgroud)
无论如何,因为两者产生相同的结果,是否应该优先使用另一个?
我正在编译Linux库(对于Android,使用NDK的g ++,但我敢打赌我的问题对任何Linux系统都有意义).在将这些库提供给合作伙伴时,我需要使用版本号标记它们.我还必须能够以编程方式访问版本号(例如,在"关于"对话框或GetVersion函数中显示它).
我首先使用unversioned标志(版本0.0)编译库,并且在我将测试发送给合作伙伴之前完成测试时需要将此版本更改为真实版本.我知道修改源代码并重新编译会更容易,但我们不想这样做(因为如果我们重新编译代码,我们应该再次测试所有内容,我们觉得它不会出错,请看这个注释post和最后因为我们的开发环境以这种方式工作:我们为Windows二进制文件执行此过程:我们设置0.0资源版本字符串(.rc),然后我们使用verpatch更改它...我们想要使用相同的类型运送Linux二进制文件时的进程).
这里最好的策略是什么?总而言之,要求是:
0.0或其他任何东西)编译二进制文件如果您的答案是"重命名.so",那么请提供3的解决方案:如何在运行时检索版本名称(即:文件名).
我在考虑一些解决方案,但不知道它们是否可以工作以及如何实现它们.
string或三个int),并有办法在以后的二进制文件中更改它?使用二进制sed ......?请注意,我们使用QtCreator来编译Android .so文件,但它们可能不依赖于Qt.因此使用Qt资源并不是一个理想的解决方案.
这是一段非常简单的代码:
#include <vector>
int main() {
std::vector<int> myVec(5);
std::vector<int>::const_iterator first = myVec.begin();
std::vector<int>::const_iterator last = myVec.begin() + 3;
std::vector<int> newVec1(first, last);
std::vector<int> newVec2(myVec.begin(), last);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
行声明newVec1编译.
行声明newVec2失败,出现以下错误:
prog.cpp: In function 'int main()':
prog.cpp:11:49: error: no matching function for call to 'std::vector<int>::vector(std::vector<int>::iterator, std::vector<int>::const_iterator&)'
std::vector<int> newVec2(myVec.begin(), last);
^
prog.cpp:11:49: note: candidates are:
In file included from /usr/include/c++/4.9/vector:64:0,
from prog.cpp:3:
/usr/include/c++/4.9/bits/stl_vector.h:401:9: note: template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&)
vector(_InputIterator __first, _InputIterator __last,
^
/usr/include/c++/4.9/bits/stl_vector.h:401:9: note: …Run Code Online (Sandbox Code Playgroud) 我正在使用CMake进行两个版本的项目,其中一个需要-lglapi而另一个则不需要.
到目前为止,我们使用的线条看起来像这样:
SET(CMAKE_C_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
SET(CMAKE_CXX_FLAGS "-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm")
Run Code Online (Sandbox Code Playgroud)
我在我的CMakeList.txt中添加了一个if语句,紧跟在这些行之后:
if(SINGLE_MODE)
SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} " -lglapi")
SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} " -lglapi")
endif(SINGLE_MODE)
Run Code Online (Sandbox Code Playgroud)
SINGLE_MODE变量定义了一点点.当我使用message命令显示标志变量的内容时,它看起来没问题:
-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm -lglapi
Run Code Online (Sandbox Code Playgroud)
但是当我开始编译时,我遇到了编译错误.使用详细模式我意识到在编译器调用中看起来像:
-O3 -xSSE3 -restrict -lpthread -lX11 -ldrm; -lglapi
Run Code Online (Sandbox Code Playgroud)
也就是说,在将-lglapi添加到列表之前添加了分号.
这里有没有人遇到类似的问题,并知道解决这个问题的方法?我用谷歌搜索了很长一段时间并研究了CMake手册,但看不出我在这里做错了什么.
谢谢,托比亚斯
我们有一个算法库对可能是NaN的数字进行大量std::min/ std::max操作.考虑这篇文章:为什么Release/Debug对std :: min有不同的结果?,我们意识到它显然是不安全的.
有没有办法阻止开发人员使用std::min/ std::max?
我们的代码使用VS2015和g ++编译.我们的所有源文件都包含一个公共头文件(通过/FIVS2015和-includeg ++的选项).是否有任何代码/编译指示可以放在这里使任何cpp文件使用std::min或std::max无法编译?
顺便说一下,使用此功能的遗留代码(如STL标头)不应受到影响.只有我们编写的代码才会受到影响.
我在Window下读取Linux文件时出现问题.这是问题讨论:在Windows下使用fstream :: seekg在Unix下创建的文件.
通过打开指定的文本文件来解决该问题std::ios_base::binary.
但这种模式的实际意义是什么?如果指定,您仍然可以将文件用作文本文件(使用mystream << "Hello World" << std::endl和阅读std::getline).
在Windows下,唯一的区别,我注意到的是mystream << "Hello World" << std::endl使用:
0x0D 0x0A如果std::ios_base::binary未指定行分隔符(EOL和回车)0x0A作为行分隔符if if std::ios_base::binary指定(仅限EOL)打开生成的文件时,记事本不能巧妙地显示行std::ios_base::binary.像vi或Wordpad这样的优秀编辑确实展示了它们.
这是否真的是有和没有生成的文件之间的唯一区别std::ios_base::binary?文档说Consider stream as binary rather than text.,这到底是什么意思?
std::ios_base::binary如果我不关心在记事本中打开文件并且想要fstream::seekg一直工作,总是设置是否安全?