这真的开始让我感到困惑.我何时使用它们,何时不使用它?
例如,我在链接列表上读取.cpp,其类声明为:
struct CarPart
{
long PartNumber;
char Partname[40];
double UnitPrice;
CarPart *next;
};
class ListOfParts
{
int size;
public:
CarPart *head;
ListOfParts();
~ListOfParts();
const int count() const;
void insert( CarPart *item );
CarPart *retrieve( int pos );
};
Run Code Online (Sandbox Code Playgroud)
有了这段代码,为什么我可以写
ListOfParts *pPart = new ListOfParts();
CarPart *pCarPart = new CarPart;
Run Code Online (Sandbox Code Playgroud)
声明ListOfParts的实例需要(),但不是我的CarPart?那令我困惑.当我之前问过一个问题时,人们告诉我这样的声明是一个返回ListOfParts对象的函数,而不是实际的构造函数.所以我猜这仍然是不同的东西.
这里发生了什么事?
PS:我是否正确假设count()右边的const意味着我无法修改count中的任何值?
因为我仍然希望在12月之前创建一个简单的吃豆人克隆,我现在正在教自己C#以便使用XNA Game Studio 3.1,我找到了最好的答案,并提供了现成的文档来学习因为有点未来安全.
无论如何,问题来自我正在阅读的一本书,其中一个函数被声明为:
public void TransformVectorByReference()>
{
/* ...stuff... */
}
Run Code Online (Sandbox Code Playgroud)
我假设内部并不重要,因为编译器在函数声明中抱怨'>`符号.但是,多个函数被声明为这样,并且所有函数都抛出了类型的错误:
; 预期.
有人能告诉我这个功能是做什么的/指向我以前的SO问题,因为我没有通过搜索找到任何答案,因为我不知道该怎么称呼这个有趣的事情.
我得到这个代码片段的书是Sam的Microsoft XNA Game Studio 3.0.如果有人对本书有任何其他更好的选择,我会很高兴看到它们.
编辑:
我添加了一个示例函数,从三到五个函数,几乎相同,但一个使用>关键字.然而,有人指出,这可能不是作者的错,而是书的制作/错误纠正的方式.
public void TransformVectorByReference()
{
Matrix rotationMatrix = Matrix.CreateRotationY( MathHelper.ToRadians(45.0f) );
// Create a vector pointing the direction the camera is facing.
Vector3 transformedReference;
Vector3.Transform(ref cameraReference, ref rotationMatrix, out transformedReference);
// Calculcate the position the camera is looking at.
Vector3.Add(ref cameraPosition, ref transformedReference, out cameraTarget);
}
public void TransformVectorByReferenceAndOut()>
{
Matrix rotationMatrix = Matrix.CreateRotationY( MathHelper.ToRadians(45.0f) );
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习一些Boost图书馆.我目前正在做我认为未来的家庭作业项目(学期尚未开始).然而,这个问题不是关于作业问题,而是关于Boost.
码:
/* AuctionApplication.h */
class AuctionApplication : boost::noncopyable
{
private:
boost::ptr_vector<Auction> auctions_;
boost::ptr_vector<Bidder> bidders_;
boost::ptr_vector<Bid> bids_;
/* AuctionApplication.cpp */
Bid *AuctionApplication::GetLatestBid(const Auction *auction)
{
Bid *highestBid = 0;
BOOST_FOREACH(Bid *bid, bids_) // Error here!
if (bid->GetAuction()->GetName() == auction->GetName())
highestBid = bid;
Run Code Online (Sandbox Code Playgroud)
BOOST_FOREACH用于使用与上面完全相同的代码的法向量.自从我开始使用ptr_vectors以来,我得到了错误:
error C2440: '=' : cannot convert from 'Bid' to 'Bid *'
让我相信ptr_vector以某种方式模糊了foreach方法的指针.
如果我反而写
BOOST_FOREACH(Bid *bid, bids_)
Run Code Online (Sandbox Code Playgroud)
我得到了四种类型的错误
error C2819: type 'Bid' does not have an overloaded member 'operator ->'
这很糟糕,因为我知道出价是一个指针.
如何BOOST_FOREACH正确地迭代ptr_vectors?
检查以下代码:
这有效:
T *p = (std::find( this->first(), this->last(), *pPos ));
if( p != last() )
{
this->push_back(data);
T *right = (this->last() - 1);
T *left = (this->last() - 2);
while( *pPos != data )
std::iter_swap( left--, right-- );
return const_cast<T*>(pPos);
}
Run Code Online (Sandbox Code Playgroud)
这不是:
boost::scoped_ptr<T> p(std::find( this->first(), this->last(), *pPos ));
if( p.get() != last() )
{
this->push_back(data);
T *right = (this->last() - 1);
T *left = (this->last() - 2);
while( *pPos != data )
std::iter_swap( left--, right-- );
return const_cast<T*>(pPos);
}
Run Code Online (Sandbox Code Playgroud)
第二个版本给出了运行时错误 …
这是我唯一能想到的.事情很有感觉.
我有一个结构如下:
struct NumPair
{
wchar_t *pFirst, *pSecond;
int count;
Run Code Online (Sandbox Code Playgroud)
与ctor,副本分配和建设
NumPair( wchar_t *pfirst, wchar_t *psecond, int count = 0)
NumPair( const NumPair& np )
NumPair& operator=( const NumPair& np )
Run Code Online (Sandbox Code Playgroud)
这是我最后一个问题的扩展,我在这个问题中要求一种方法来对包含特殊(德语)字符的字符指针进行排序,例如ü, ä, ö.
解决方案似乎使用宽字符类型,但编译器由于某种原因抛出了一百多个转换错误.
样本输入:
// dict_ is a container of NumPairs.
dict_.push_back( NumPair ( "anfangen", "to begin, to start" ) );
Run Code Online (Sandbox Code Playgroud)
编译器抱怨它无法将a转换const char *为a wchar_t.很好,我改变push_back说
dict_.push_back( NumPair ( wchar_t("anfangen"), wchar_t("to begin, to start") ) );
Run Code Online (Sandbox Code Playgroud)
编译器错误:找不到接受所有参数的NumPair ctor.
什么.的.地狱.我尝试了完整的重建,认为我的VSC++ 10正在崩溃.不,猜不是.
我究竟做错了什么?
码 …
简单的问题,真的.
我的朋友和我正在仔细阅读下一学期应该听到的教授的Powerpoint幻灯片.这将是一门Java课程.出于某种原因,他有这个C++代码片段
#include <iostream.h>
main ()
{ cout << "Hello, World\n"; }
Run Code Online (Sandbox Code Playgroud)
我已经告诉我的朋友,"不,这不适用于任何现代C++编译器."
我现在的问题是,这可以编译吗?
当我想渲染图片时,我向服务器发送请求以及相关图片进行渲染.奇怪的是它是如何返回的:
<img src="https://blargh.com/displayTemplate?templateid=template1">
Run Code Online (Sandbox Code Playgroud)
该链接应该是图像数据.
使用此功能,如何将其转换为可以向用户显示的图像?这是一个Facebook应用程序,我不能只嵌入HTML.它需要在我的AS应用程序中显示为Bitmap或Sprite或其他任何东西.试图将其转换为Bitmap或BitmapData失败了......
我能给出的唯一其他信息是我的templateLoader是a Loader,它.data应该带有HTML.
我想感谢大家的快速回复^^ Sleep()按预期工作,我的CPU不再被这个程序恶意吞噬了!我将按原样保留这个问题,但是让每个人都知道CPU问题已经得到了方便和专业的回答:D
除此之外,我肯定会确保在面对更大,更重要的问题时将微优化保持在最低限度!
================================================== ==============================
出于某种原因,我的程序,我为笑和练习制作的控制台闹钟,是CPU密集型的.它消耗大约2mB的RAM,这对于这么小的程序来说已经相当多了,但它有时会破坏我的CPU超过50%的资源.
大部分时间我的程序除了倒数秒之外什么都不做,所以我想我的程序中的这部分是导致我的CPU压力太大的部分,尽管我不知道为什么.如果是这样的话,你可以推荐一种减少它的方法,或者如果问题不能轻易解决,可能会使用库吗?
/* The wait function waits exactly one second before returning to the *
* called function. */
void wait( const int &seconds )
{
clock_t endwait; // Type needed to compare with clock()
endwait = clock() + ( seconds * CLOCKS_PER_SEC );
while( clock() < endwait ) {} // Nothing need be done here.
}
Run Code Online (Sandbox Code Playgroud)
如果有人浏览CPlusPlus.com,这是他们编写的clock()函数的真正复制/粘贴,作为clock()的示例.很多为什么评论//Nothing need be done here如此黯淡无光.我还不完全确定clock()到底是做什么的.
程序的其余部分调用另外两个仅每六十秒激活一次的函数,否则返回调用者并倒计时另一秒,所以我不认为CPU太密集 - 虽然我不知道,这是我的第一次尝试在优化代码.
第一个功能是一个控制台清除使用system("cls"),我知道,它真的,非常慢,不是一个好主意.我将改变后匆忙,但是,因为它只是每60秒激活一次,并且有明显的滞后尖峰,我知道这不是大多数时候的问题.
第二个功能也只用每六十秒重写屏幕内容和更新的剩余时间.
我将在调用wait,clearScreen和显示的函数中进行编辑,如果很清楚这个函数不是问题.我已经尝试引用大多数变量,因此它们不会被复制,也可以避免, …
这个问题并不意味着听起来像现在可能是侮辱性的.
这是一个家庭作业,规格表很少,设计很差,至少可以说.我们有一个功能:
double refuel( int liter, GasStation *gs )
{
// TODO: Access private variable MaxFuel of gs and decrement.
}
Run Code Online (Sandbox Code Playgroud)
声音够简单?它应该是,但GasStation类没有访问私有变量MaxFuel的功能.那么我怎样才能使用函数加油来访问它?
我不打算创建一个函数,setFuel( int liter )因为如果我改变他的规范,老师总是抱怨相当有力.所以...我想我必须做一些破解,但是我不知道如何在没有明确改变GasStation中的唯一功能并给它一个参数的情况下解决这个问题,这样我就可以在这里调用它.
或许任何提示?
我正在编写Frank Luna的书"使用DirectX 10进行3D游戏编程简介"中的示例代码.代码是附录A:Windows编程部分中的第一个Win32示例.
现在,该程序在VC++ 2008/2010下编译,但没有窗口出现,虽然调试会话已经开始,我必须强制关闭它.我不知道它在哪里,我没有使用Win32控制台模式,我关闭了所有其他窗口,没有其他IDE或VC++会话正在运行.
知道为什么会这样吗?
PS:我还检查过我的进程.它确实在运行.
#include <Windows.h>
HWND ghMainWnd = 0;
bool InitWindowsApp(HINSTANCE instanceHandle, int show);
int Run();
LRESULT CALLBACK
WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
int WINAPI
WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nShowCmd )
{
if( !InitWindowsApp(hInstance, nShowCmd) )
return 0;
return Run();
}
bool InitWindowsApp( HINSTANCE instanceHandle, int show )
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = instanceHandle;
wc.hIcon …Run Code Online (Sandbox Code Playgroud)