当我们使用Visual Studio运行C++程序时,Configuration Properties->Debugging如果程序需要一些参数,我们经常会在内部设置"Command Arguments" .例如,我们可以abc.exe -r 1在命令行中运行,并且为了直接在Visual Studio中运行程序,我们可以用命令填充命令参数 -r 1.所以我的问题是:我们可以用cmake设置默认的命令参数吗?通过这样做,不需要手动设置它们.谢谢.
我知道如何使用iOS->Framework&Library->Cocoa Touch Static Libraryxcode 4.6 构建一个对象C静态库,在本教程的帮助下,在iOS教程中创建一个静态库是很简单的.但是,我不确定的一件事是如何为io应用程序构建和使用纯C++静态库.为了构建C++静态库,我也使用 iOS->Framework&Library->Cocoa Touch Static Library指南,区别在于我在创建静态库项目时删除所有.h和.m文件,然后将所有C++静态库头文件和实现文件放在项目中.一个非常简单的例子如下:
hello.h
#include <iostream>
void say_hello();
Run Code Online (Sandbox Code Playgroud)
HELLO.CPP
#include "hello.h"
void say_hello()
{
std::cout<<"hello"<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作,我可以hello.a为iPhone 6.1模拟器构建静态库.下一步是构建一个将调用静态库的应用程序.我构建了一个简单iOS application->Single View Application的iPhone 6.1模拟器,然后尝试调用文件中的 hello.a静态库ViewController.mm(将ViewController.m更改为ViewController.mm,以便它可以调用C++函数),只需使用以下代码:
say_hello();
Run Code Online (Sandbox Code Playgroud)
但是,我收到一条警告和两条错误消息:
警告:
ld: warning: ignoring file hello.a, file was built for archive which is not the architecture being linked (i386):
Run Code Online (Sandbox Code Playgroud)
错误1:
hello.a
Undefined symbols for architecture i386:
"say_hello()", referenced from:
-[ViewController viewDidLoad] in ViewController.o
Run Code Online (Sandbox Code Playgroud)
错误2: …
因为std::vector,我们可以vector::reserve(n)用来请求矢量容量至少足以包含n个元素.那怎么样std::set?我们是否有类似的功能来保留其能力?我问这个问题是因为有时它是一个请求为std :: set变量分配足够的功能,当它被用作函数的引用参数时,它来自另一个动态库(使用多线程调试(/ MTd)) ).
编辑
一种可能的解决方案可能是使用get_allocator函数:
std::set<float> abc;
float *p;
p = abc.get_allocator().allocate(100);
for(int i=0; i<100; i++)
abc.insert(abc.end(),i);
std::set<float>::iterator it = abc.begin();
std::set<float>::iterator itEnd = abc.end();
while(it != itEnd)
{
std::cout<<(*it)<<std::endl;
it++;
}
abc.get_allocator().deallocate(p,100);
Run Code Online (Sandbox Code Playgroud) 有几种方法可以在没有内存操作的情况下在C++和STL中定义2D数组,以下代码说明了两种不同的方法:
int main ()
{
/**************
1 2 3
4 5 6
***************/
// Method 1
const int ROW = 2;
const int COL = 3;
int array1[ROW][COL];
for(int i=0; i<ROW; i++)
for(int j=0; j<COL; j++)
array1[i][j] = i*COL+j+1;
// Method 2
typedef vector<vector<int> > ARRAY;
ARRAY array2;
vector<int> rowvector;
for(int i=0; i<ROW; i++)
{
rowvector.clear();
for(int j=0; j<COL; j++)
rowvector.push_back(i*COL+j+1);
array2.push_back(rowvector);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:还有其他方法来定义2D数组吗?哪一个最有效?谢谢!
我的问题与如何使用Doxygen在模板类中注释typedef有关.我将举例说明我的问题:
namespace fundamental
{
/**
* Basic function
*/
template <typename T>
class Base
{
public:
T x; ///< x coordinate
T y; ///< y coordinate
};
typedef Base<float> Coordinate; ///< Point coordinate class
}
Run Code Online (Sandbox Code Playgroud)
使用Doxygen处理上述代码后,我可以获得一个HTML页面来显示类Base的定义.但是,对于typedef类Coordinate,它不会出现在Base的同一页面中.实际上,所有typedef类型都列在基本命名空间页面中,以及此命名空间中的所有类.我想知道是否可以在Base HTML页面中显示Coordinate类.通过这样做,Base和Coordinate之间的链接将变得更加紧密.谢谢!
我有一个与MAC中的CMake有关的问题.我确保可执行程序将使用以下代码正确链接框架和库:
link_directories(directory_to_framework_and_libs)
add_executable(program ${FILE_LIST})
target_link_libraries(program framework_name lib1 lib2)
Run Code Online (Sandbox Code Playgroud)
在第一行代码中,我表示可执行程序可以搜索框架和库的位置.在第三行代码中,框架和库将链接到可执行程序.但是,当我使用Xcode 4编译从cmake文件创建的xcode.project时,项目一直在抱怨它无法找到-lframework_name:ld: library not found -lframework_name任何想法都将受到赞赏.
我曾经使用MATLAB,对于我提出的问题,我可以使用p = polyfit(x,y,1)来估算板中散射数据的最佳拟合线.我想知道我可以依赖哪些资源来用C++实现线拟合算法.我知道这个主题有很多算法,对我来说,我希望算法应该快,同时它可以在MATLAB中获得相当的polyfit函数精度.
C++类构造函数可以内联或不内联.但是,我发现了一个奇怪的情况,只有内联类构造函数可以避免Visual Studio内存崩溃.示例如下:
dll.h
class _declspec(dllexport) Image
{
public:
Image();
virtual ~Image();
};
class _declspec(dllexport) Testimage:public Image
{
public:
Testimage();
virtual ~Testimage();
};
typedef std::auto_ptr<Testimage> TestimagePtr;
Run Code Online (Sandbox Code Playgroud)
dll.cpp
#include "dll.h"
#include <assert.h>
Image::~Image()
{
std::cout<<"Image is being deleted."<<std::endl;
}
Image::Image()
{
}
Testimage::Testimage()
{
}
Testimage::~Testimage()
{
std::cout<<"Geoimage is being deleted."<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
dll库被编译为动态库,并且它静态链接到C++运行时库(Multi-threaded Debug (/MTd)).运行库的可执行程序如下:
int main()
{
TestimagePtr my_img(new Testimage());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
可执行程序将调用dll库,它还静态链接运行时库.我遇到的问题是,在运行可执行程序时,会出现以下错误消息:

但是,当dll中的类构造函数被内联时,以下代码显示:
class _declspec(dllexport) Image
{
public:
Image();
virtual ~Image();
};
class _declspec(dllexport) Testimage:public Image
{ …Run Code Online (Sandbox Code Playgroud) 我对cvs有疑问.当我使用Tortoise CVS的添加功能向CVS添加两个文件时.出现以下错误消息:
cvs add: ' **.cpp' added independently by second party.
Run Code Online (Sandbox Code Playgroud)
有没有优雅的方法来解决这个问题?谢谢.
我现在正在尝试在这篇文章中运行一个cmake脚本.使用此脚本,CMake将打印目标的所有属性.但是,当它尝试检索目标的"LOCATION"属性时,会发现以下错误:
The LOCATION property may not be read from target "abc". Use the target
name directly with add_custom_command, or use the generator expression
$<TARGET_FILE>, as appropriate.
Run Code Online (Sandbox Code Playgroud)
然后我尝试打印属性LOCATION,它也不起作用.有任何想法吗?