小编Bra*_*ler的帖子

unique_ptr <Expression> :: Operator'='不可访问

简介:为什么'='赋值运算符不能与两个相同类型的对象一起使用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)

c++ std operators unique-ptr c++11

2
推荐指数
2
解决办法
1316
查看次数

处理'img'click事件,并使用jQuery将'alt'属性插入文本框

我正在使用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。

javascript ajax jquery emoticons

2
推荐指数
1
解决办法
1394
查看次数

C++名称空间围绕头部声明和源定义

我正在创建一个静态库,其中定义的所有内容都在一个名称空间中.但我不确定是否应该将方法定义为类,或者将它们包装在命名空间中.我问的是:

这是有效的:

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::在每个方法标识符之前使用.

c++ coding-style namespaces declaration

2
推荐指数
1
解决办法
1726
查看次数

在Windows窗体中呈现OxyPlot图形

我想在我的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班上的成员,但我找不到办法来解决问题.如何在图表中绘制方程式?

c# graphing controls winforms oxyplot

2
推荐指数
1
解决办法
1万
查看次数

Win32 Visual Styles向后兼容性?

当我在我的程序中嵌入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他们是否运行支持视觉样式的版本?如果是这样,我应该在预处理器中检查哪个版本号.我想知道的另一件事是,没有视觉风格,我可以运行程序的最低版本是什么?

winapi platform operating-system version visual-styles

1
推荐指数
1
解决办法
516
查看次数

C++/WinAPI - 从DWORD中删除标志(按位运算符?)

我现在知道如何使用按位&AND运算符检查DWORD(特别是Windows样式)中是否存在某个标志.我该怎么做:

if (dwMyFlags & dwSomeFlag) {
    // dwMyFlags contains dwSomeFlag
    // ->> How do I remove dwSomeFlag from dwMyFlags?
}
Run Code Online (Sandbox Code Playgroud)

我知道减去它是行不通的,是否有一些运算符可以从DWORD中删除标志?

c++ winapi flags dword bit-manipulation

1
推荐指数
3
解决办法
1939
查看次数

C++内存 - 用'new'创建的原始类型变量是否需要删除?

在C++中进行内存管理时,我有点新鲜.我读到如果你用new关键字创建一个类,你必须要delete对象释放它的内存.我还读到了在栈上创建的原始类型,例如int,charbool,这意味着当它们超出范围时会被删除.

但是用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++ memory winapi memory-management allocation

0
推荐指数
2
解决办法
849
查看次数