我正在尝试使用cmake为c ++构建Box2D库。当我运行cmake gui时,出现错误:
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
Configuring incomplete, errors occurred!
Run Code Online (Sandbox Code Playgroud)
像这些人一样,大多数问题都通过说“将MinGw / bin添加到PATH”来回答,但我已经在PATH上找到了。还有什么可能导致此错误?
我有使用${CC}变量进行编译器选择的 makefile:
${CC} $(CFLAGS) aaa.cpp -o aaa.o
Run Code Online (Sandbox Code Playgroud)
在 make ${CC} 期间带来 cc 编译器。${CC}但整体上没有定义makefile。这个变量怎么得呢cc?
语境
我正在开发一个旨在向设备发送某些命令的项目。每个设备都可以与一个 dll 连接(例如 deviceADll.h、deviceBDll.h),并且这些 Dll 不是由我编写的,我也不能以任何方式修改它们。我负责将DeviceB集成到项目中,对项目结构进行最小的更改。我知道该结构可能不是最佳的和/或设计良好的,因此我愿意接受有关该问题的建议作为最后的解决方案。
由于设备非常相似,因此所有 Dll 函数都具有相同的名称,并且通常具有相同的原型。
也正因为如此,我创建了一个父类(Device_ts.h),DeviceA_ts.h和DeviceB_ts.h继承自该父类(我也有一个设备的工厂类,但我认为它与我的问题无关) 。
问题
当我尝试包含两个 Dll 时出现问题:项目编译,但我得到一个
Warning 60 warning LNK4006: Connect@12 already defined in DeviceA.lib(DeviceA.dll); second definition ignored C:\project_path\DeviceB.lib(DeviceB.dll) Project_Name
随后是一个
Warning 61 warning LNK4006: __imp__Connect@12 already defined in DeviceA.lib(DeviceA.dll); second definition ignored C:\project_path\DeviceB.lib(DeviceB.dll) Project_Name
和一个
Warning 62 warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library C:\project_path\DeviceB.lib(DeviceB.dll) Project_Name
有人经历过类似的情况吗?我应该忽略这些警告还是因为它们的定义被忽略而无法调用DeviceB.h函数? …
我刚开始用C++编程,在编写代码时我开始注意到我的代码中有很多for循环,然后我开始思考.
在for循环中,当你创建如下变量for (int **i**=1;i<10;i++)时,i循环完成后会发生什么?
是否可以使用相同的变量名创建多个for循环?
如何在循环中创建变量?
我的老师在我们的一个铸造示例中包含了以下几行.c是Circle继承自类的类的对象Point.在我搜索问题的答案"我可以将类的对象转换Point为类型Circle吗?" 我发现他使用的语法与我曾经使用的每个网站不同.这些网站都使用static_cast和dynamic_cast语法.他不会在测试中使用static_cast和dynamic_cast,我只是想知道他在使用什么以及它是如何运作的.
另外,如果你能回答我是否可以将基础对象转换为派生类型,我非常感谢你.
output << "the center of the circle is at " << (Point) c;
// casting `Circle` object `c` with type `(Point)`, calls the first overloaded >stream insertion operator"
Run Code Online (Sandbox Code Playgroud) 我正在学习c ++,我的老师写了这段代码:
Tpoint并且TObjetGraphique是两个分开的类
origine是类型的对象Tpoint声明private内TObjetGraphiqueRun Code Online (Sandbox Code Playgroud)TPoint TObjetGraphique::getOrigine() const {return (TPoint(origine));}
我想知道为什么我们不会写:
TPoint TObjetGraphique::getOrigine() const
{return origine;}
Run Code Online (Sandbox Code Playgroud)
有什么区别吗?
目前我正在阅读Scott Meyers的Effective Modern C++(第15项 - 尽可能使用constexpr).作者说:
当使用编译期间未知的一个或多个值调用constexpr函数时,它的作用类似于普通函数,在运行时计算其结果.这意味着您不需要两个函数来执行相同的操作,一个用于编译时常量,另一个用于所有其他值.constexpr功能可以完成所有工作.
我在http://coliru.stacked-crooked.com/中尝试了以下代码片段
#include <iostream>
class Point
{
public:
constexpr Point(double a, double b) noexcept
: _a(a), _b(b)
{
}
void print() const noexcept
{
std::cout << "a -> " << _a << "\tb -> " << _b << std::endl;
}
private:
double _a;
double _b;
};
double get_a() noexcept
{
return 5.5;
}
double get_b() noexcept
{
return 5.6;
}
int main()
{
constexpr Point p1(2.3, 4.4);
p1.print(); …Run Code Online (Sandbox Code Playgroud) 我想使用RTTI和损坏的函数(指针)类型字符串.
在将其归类为XY问题之前,我知道有更好的选项可以使用多态等来绑定函数.
这是一个纯粹的学术问题,如何typeid()正确使用函数指针,这些函数指针应该因其合法重载的签名而有所不同.
如果我使用以下代码,似乎我可以检索typeinfo::name()各种命名空间/类型的唯一值:
#include <iostream>
#include <typeinfo>
#include <string>
void foo(int) {
}
namespace woozle {
void goozle(int) {}
}
struct bar {
void baz(int) {}
static void boo(int) {}
};
int main() {
std::cout << typeid(&foo).name() << std::endl;
std::cout << typeid(&woozle::goozle).name() << std::endl;
std::cout << typeid(&bar::baz).name() << std::endl;
std::cout << typeid(&bar::boo).name() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Run Code Online (Sandbox Code Playgroud)PFviE PFviE M3barFviE PFviE
完全符合我的预期(我假设i在错位的名称中指的是参数签名).
现在我想要这样的东西(这是完全合法的函数重载):
#include <iostream>
#include <typeinfo>
#include <string>
void foo(int) { …Run Code Online (Sandbox Code Playgroud) 我用C++和Pascal编写了函数,给出了第n个Fibbonacci数.正如预期的大n值(n> 92,因为甚至f(93)> 2 ^ 63 + 1)我得到了不正确的结果.
但是当我将它们与相同的n进行比较时,我会在两种语言中得到相同的结果.
这与我的想法相反,我会得到一些随机数.
我想知道为什么我得到相同的结果以及为什么我首先没有得到整数溢出.
有人可以向我解释一下吗?
码:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
long long fibo(int n){
long long a1,a2,pom;
int i=1;
a1 = 0; a2 = 1;
while(i<=n){
pom = a2;
a2 = a1 + a2;
a1 = pom;
i++;
}
return a1;
}
int main(){
int n;
cin >> n;
cout << "Function: "<< setprecision(50) << fibo(n) << endl;
}
Run Code Online (Sandbox Code Playgroud)
Program AddNums(output);
function fibo(n:integer):int64;
var
a1,a2,pom:int64;
i:integer;
begin
a1:=0;a2:=1;i:=1;
while(i<=n)do …Run Code Online (Sandbox Code Playgroud) 我的函数应列出屏幕上char数组的所有元素.但是如果阵列完成它应该停止.数组的大小是可变的.我以为数组以'\ 0'结尾.所以我这样做了:
for(int i=0; i< size; i++){
if(word[i] != '\0')
cout<< word[i];
}
Run Code Online (Sandbox Code Playgroud)
但该计划并不止于此.它会创建一些随机符号.
例如char number [] ="0123"
该程序给出:0123§&
我的if条件出了什么问题?