在设置SDL时遇到一些问题后,我发现SDL定义了一个替换main的宏:
#define main SDL_main
// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)
如果main函数没有定义argc和argv参数,这也会产生编译错误.
当我看到它时,这个宏让我很头疼...为什么SDL需要重新定义主要?经过一番搜索,我找到了一些人#undef main,并以正常的方式使用它.
所以这就是问题: 为什么SDL需要重新定义main,它做什么?取消定义是否有任何副作用?
我注意到的一件事是SDL将标准输出和错误重定向到文件(我不想要这种行为),如果我取消定义主要行为,这种行为就会停止.
我想验证一个表是否存在于数据库中,如果它不存在,则创建它.如何获取当前数据库中所有表的列表?
我可以用这样的SELECT获取数据库列表:
SELECT * FROM sys.databases
Run Code Online (Sandbox Code Playgroud)
剩下的就是创建表,如果它不存在.
我也尝试用这样的数据库同时创建表:
if not exists(select * from sys.databases where name = 'db')
begin
create database [db]
use [db];
create table [test] (
Time datetime,
Message varchar(1024) )
end
Run Code Online (Sandbox Code Playgroud)
但它在'使用'行上给我错误,说'db'不存在.这一次,我将尝试在两个不同的命令中执行此操作.
我的应用程序使用比标准输出日志信息,这就是为什么我写我自己的另一个输出Log(),Error(),Panic()和Assert()功能.为了很好地组织事情,我将所有调试内容放在Debug命名空间中.
对于该Assert()函数来说,提供源文件和行号更有意义,这只能使用__LINE__和__FILE__宏来实现.然而,总是必须指定这两个参数,这是非常不愉快,低效等等.
所以这就是我的代码的样子:
namespace Debug {
void Assert (int condition, std::string message, std::string file, int line);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否可以在Debug命名空间中放置一个包含这两个参数的宏?像这样:
namespace Debug {
void Assert_ (int condition, std::string message, std::string file, int line);
#define Assert(a,b) Assert_(a, b, __FILE__, __LINE__)
}
// .... Somewhere where I call the function ....
Debug::Assert (some_condition, "Some_condition should be true");
// Output: Assertion failed on line 10 in file …Run Code Online (Sandbox Code Playgroud) 我有以下链接的CSS代码:
a {
text-decoration: none;
color: #248AC9;
}
a:hover {
color: #8DCFF7;
}
Run Code Online (Sandbox Code Playgroud)
问题是在Internet Explorer中,图像具有与"颜色"颜色相同的奇怪边框.我该如何解决这个问题,并正确地绘制图像.HTML代码很简单:
<a href="calculator-operators.htm"><img src="img/link.png" /></a>
那么,我该如何解决这个问题呢?
我有一个基类'Base',这是一个纯虚拟类:
class Base {
public:
virtual void A() = 0;
virtual void B() = 0;
virtual ~Base() { } // Eclipse complains that a class with virtual members must have virtual destructor
};
Run Code Online (Sandbox Code Playgroud)
我还有另外两个类,其中一个实现了A(),另一个实现了B():
class DerivedA : public virtual Base
{
public:
virtual void A() {
printf("Hello from A");
}
};
class DerivedB : public virtual Base
{
public:
virtual void B() {
printf("Hello from B");
}
};
Run Code Online (Sandbox Code Playgroud)
声明中的虚拟关键字应解决钻石问题.
现在我想将这两个类组合成另一个类,以便实现A()和B(),如下所示:
class DerivedC: public DerivedA, public DerivedB {
// Now DerivedA …Run Code Online (Sandbox Code Playgroud) 我正在研究一个XmlWriter类,我希望能够以大多数标准数据格式(字符串,整数,浮点数等)输出属性或文本.为此,我使用的是文件流.
对于bool数据类型,我想指定模板的特化,以便输出true而false不是1和0.
但是,以下代码似乎没有编译:
class XmlWriter {
private: /* ... */
public: /* ... */
template <typename T>
void writeText(T text) {
/* ... */
}
template <> // <-- error: explicit specialization in non-namespace scope 'class Strategy::IO::XmlWriter'
void writeText<bool> (bool text) { // <-- error: template-id 'writeText<>' in declaration of primary template
/* ... */
}
template <typename T>
void writeAttribute(std::string key, T value) { // <-- error: …Run Code Online (Sandbox Code Playgroud) 我正在编写一个用c ++保存日期的类,我发现了以下问题:
我N自参考日期(在我的情况下将是公元0001年1月1 日)以来有多天,包括自参考日以来经过的闰日.我怎么能转换这个数字到一年Y,月M和日D有效?
我想尽可能高效地完成这项工作,因此最佳实现显然会具有O(1)复杂性.
接下来的部分将解释我已经学到的一些东西.
要确定一年是否跳跃,有一些规则:
这将转换为这样的代码:
bool IsLeapYear(int year)
{
// Corrected after Henrick's suggestion
if (year % 400 == 0) return true;
if ((year % 4 == 0) && (year % 100 != 0)) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
计算一年前飞跃多少年的有效方法是:
int LeapDaysBefore(int year)
{
// Years divisible by 4, not divisible by 100, but divisible by 400
return ((year-1)/4 - (year-1)/100 + …Run Code Online (Sandbox Code Playgroud) 如何使用C#以编程方式显示/隐藏桌面图标?
我正在尝试创建一个使用小部件的替代桌面,我需要隐藏旧图标.
我有一个由Keys枚举(winforms)填充的组合框.
问题是对于没有经验的用户来说,关键名称不是很明确.例如,普通用户可能不知道"OemPipe"或"HanjaMode"的含义.那么,我该如何解决这个问题,并拥有一些更好的密钥名称?
我正在考虑用键和它们的名字制作一本字典,但是自己填写字典非常耗时.
我试图弄清楚如何使相机像这样工作:
由于我有很多代码,我会尽力解释我是如何做到的,没有太多代码.我正在研究的项目非常庞大,并且有一个非常大的库,其中包含许多类和类型,这使得它很难理解.
我已经成功地完成了这项工作,但是在稍微移动一点之后,在某些角度,事情开始失败:当按下Up时,相机会侧向移动,依此类推.
我想到的算法将在下面详细解释.
问题是,我做错了吗?什么可能使它失败?我整天都试着调试这台相机,但还没弄清楚是什么让它失败了.
这就是我理解旋转的方式:一个3D矢量(可能不正确地称为矢量),其中每个组件表示对象围绕其旋转的轴.例如,X值将是对象围绕X轴旋转的程度.因为我在OpenGL中工作,所以旋转值将以度(不是弧度)为单位.
渲染相机时,我只是翻译相机位置,但符号相反.
同样适用于轮换:
glRotatef(-currentCamera->Rotation().X, 1.0f, 0, 0);
glRotatef(-currentCamera->Rotation().Y, 0, 1.0f, 0);
glRotatef(-currentCamera->Rotation().Z, 0, 0, 1.0f);
glTranslatef(-currentCamera->Position().X, -currentCamera->Position().Y, -currentCamera->Position().Z);
Run Code Online (Sandbox Code Playgroud)
我尝试使用简单的几何和数学,使用毕达哥拉斯定理和简单的三角函数,但它失败了,所以我不再试图让它工作.(例如,如果任何旋转坐标为0,则为NaN结果).
使用转换矩阵.
当用户按下任何键时,会生成一个3d矢量:
+X = right; -X = left
+Y = top; -Y = bottom
+Z = backward (towards camera); -Z = forward (away from camera)
Run Code Online (Sandbox Code Playgroud)
接下来,我生成一个变换矩阵:对于3个坐标中的每一个(X然后是Y,然后是Z),将身份(4×4矩阵)乘以旋转矩阵3次.接下来,我将矩阵应用于我创建的矢量,然后将结果添加到摄像机的旧位置.
但是,这种方法似乎存在问题.起初它工作得很好,但过了一会儿,当我按下它时,它会侧身而不是应该的方式.
如上所述,我尝试使用尽可能少的代码.但是,如果这不够有用,这里有一些实际的代码.我尽力选择最相关的代码.
// ... Many headers
// 'Camera' is a class, which, among other things, …Run Code Online (Sandbox Code Playgroud)