简介:为什么'='赋值运算符不能与两个相同类型的对象一起使用std::unique_ptr<Expression, std::default_delete<Expression>>?请注意,在代码中编写的类型会std::unique_ptr<Expression>在IntelliSense错误中扩展到前者.
IDE - 运行Visual C++ 2010
OS - Windows Vista
目标 - 控制台应用程序试图使用C++ 11的实现
我已经在C++中提供了一个表达式求值程序的例子,它显然符合新标准,因为应该是固体代码会给我错误而我猜它是因为VC++不支持该功能.我得到的第一个错误是'make_unique'方法,VC++说"标识符不存在",所以我自己实现了
template<typename T>
std::unique_ptr<T> make_unique()
{
return std::unique_ptr<T>(new T());
} // Basically just wrapping 'new'? Not sure why
Run Code Online (Sandbox Code Playgroud)
在网上找到了更好的一个,但它给出了错误,这^没有错误.我所做的就是删除... Args模板参数.我有一组表达式类,如下所示:
class Expression {
virtual ~Expression() {}
};
class BinaryExpression : public Expression {
public:
std::unique_ptr<Expression> lhs;
std::unique_ptr<Expression> rhs;
virtual char GetType() const = 0; // +,-,/,*
};
// Then MulExpression, DivExpression, PlusExpression, blah blah
Run Code Online (Sandbox Code Playgroud)
现在我在这里得到错误,请注意,ParseAdditiveExpression()的返回类型是
// expr, lhs, and …Run Code Online (Sandbox Code Playgroud) 我正在使用PHP和jQuery创建一个Web聊天页面,并添加了表情功能,除jQuery部分外,其他所有操作均已完成。我的问题是,当我单击图释图像时,没有点击事件。在处理程序中,应该获取当前消息值,从'alt'属性获取表情符号的文本版本,并将文本框值设置为其先前值+附加的表情符号文本。
这是我尝试过的:
(每个按钮显示为这样:<img class="embtn" src="emoticons/happy.gif" alt=":)" />)
$(document).ready(function(){
// Insert Emoticon
$(".embtn").click(function(event){
var prevMsg = $("#usermsg").val();
var emotiText = event.target.attr("alt");
$("#usermsg").val(prevMsg + emotiText);
});
});
Run Code Online (Sandbox Code Playgroud)
我应该怎么做呢?
我正在使用的jQuery版本是1.3。
我正在创建一个静态库,其中定义的所有内容都在一个名称空间中.但我不确定是否应该将方法定义为类,或者将它们包装在命名空间中.我问的是:
这是有效的:
MyThings.h
namespace MyThings {
void DoStuff();
void DoOtherStuff();
}
Run Code Online (Sandbox Code Playgroud)
MyThings.cpp
namespace MyThings {
void DoStuff() {
// Do this.
}
void DoOtherStuff() {
// Do that.
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我应该像定义方法那样定义它吗?:
MyThings.cpp
void MyThings::DoStuff() {
// Do this.
}
void MyThings::DoOtherStuff() {
// Do that.
}
Run Code Online (Sandbox Code Playgroud)
我宁愿不使用using namespace MyThings;,我宁愿使用我的第一个例子,如果它是有效的,我觉得它使代码更易读,而不必MyThings::在每个方法标识符之前使用.
我想在我的Windows窗体中停靠一个OxyPlot图并绘制函数图y = 2x - 7.我已经下载了OxyPlot并添加了对我项目的引用.我使用以下代码将绘图添加到我的表单:
public partial class GraphForm : Form
{
public OxyPlot.WindowsForms.Plot Plot;
public Graph()
{
InitializeComponent();
Plot = new OxyPlot.WindowsForms.Plot();
Plot.Model = new PlotModel();
Plot.Dock = DockStyle.Fill;
this.Controls.Add(Plot);
Plot.Model.PlotType = PlotType.XY;
Plot.Model.Background = OxyColor.FromRgb(255, 255, 255);
Plot.Model.TextColor = OxyColor.FromRgb(0, 0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,我看到白色背景,控件已创建,但它只是一个白色背景.我环顾了OxyPlot.Plot班上的成员,但我找不到办法来解决问题.如何在图表中绘制方程式?
当我在我的程序中嵌入Visual Styles清单时,如下所示:
// Embed visual style XML manifest
#pragma comment(linker, \
"\"/manifestdependency:type='Win32'" \
" name='Microsoft.Windows.Common-Controls'" \
" version='6.0.0.0'" \
" processorArchitecture='*'" \
" publicKeyToken='6595b64144ccf1df'" \
" language='*'\"" \
)
// Link common controls library
#pragma comment(lib, "ComCtl32.lib")
Run Code Online (Sandbox Code Playgroud)
这是否意味着我的程序只能在Windows XP上运行?或者,如果计算机上没有视觉样式,他们只会使用操作系统默认样式吗?我问,因为我在我的程序中启用了Visual Studio 2008开发的视觉样式,我想知道它可以运行的最早版本的Windows是什么.我应该检查WINVER他们是否运行支持视觉样式的版本?如果是这样,我应该在预处理器中检查哪个版本号.我想知道的另一件事是,没有视觉风格,我可以运行程序的最低版本是什么?
我现在知道如何使用按位&AND运算符检查DWORD(特别是Windows样式)中是否存在某个标志.我该怎么做:
if (dwMyFlags & dwSomeFlag) {
// dwMyFlags contains dwSomeFlag
// ->> How do I remove dwSomeFlag from dwMyFlags?
}
Run Code Online (Sandbox Code Playgroud)
我知道减去它是行不通的,是否有一些运算符可以从DWORD中删除标志?
在C++中进行内存管理时,我有点新鲜.我读到如果你用new关键字创建一个类,你必须要delete对象释放它的内存.我还读到了在栈上创建的原始类型,例如int,char和bool,这意味着当它们超出范围时会被删除.
但是用new关键字创建的原始类型呢?我需要明确打电话delete吗?这些是在类上创建的吗?或者因为它们是原始的,它们仍然在堆栈上创建?
我问,因为我正在LPTSTR使用new关键字分配一个,但是我担心如果我不调用delete那个内存永远不会被释放.这是我的代码,评论中有一个简单的问题:
#include <Windows.h>
#include <tchar.h>
#include <string>
#ifdef _UNICODE
typedef std::wstring Str;
#else // ANSI
typedef std::string Str;
#endif
Str GetWndStr(HWND hwnd) {
const int length = GetWindowTextLength(hwnd);
if (length != 0) {
LPTSTR buffer = new TCHAR[length + 1]; // Allocation of string
GetWindowText(hwnd, buffer, length + 1);
Str text(buffer);
delete buffer; // <--- Is this line necessary?
return …Run Code Online (Sandbox Code Playgroud) c++ ×4
winapi ×3
ajax ×1
allocation ×1
c# ×1
c++11 ×1
coding-style ×1
controls ×1
declaration ×1
dword ×1
emoticons ×1
flags ×1
graphing ×1
javascript ×1
jquery ×1
memory ×1
namespaces ×1
operators ×1
oxyplot ×1
platform ×1
std ×1
unique-ptr ×1
version ×1
winforms ×1