标签: visual-c++-2010

有没有办法在不包含stdafx.h的情况下使用VC++ 2010?

我已经成功安装了M $ VC2010并开始使用它编写简单的程序.

我很生气#include<stdafx.h>,所以有没有办法编译和运行程序没有它?

c++ visual-c++ visual-c++-2010

5
推荐指数
3
解决办法
4981
查看次数

如何在VC++中使用set_intersection和std :: set?

我正在尝试用VC10编译VC6项目...我用set_intersection获取了一个错误C2678:我写了一些例子来理解.任何人都可以解释如何编译这个片段?

#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <string>

int main( )
{
    using namespace std;

    typedef set<string> MyType;

    MyType in1, in2, out;
    MyType::iterator out_iter(out.begin()); 

    set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), out_iter);
}
Run Code Online (Sandbox Code Playgroud)

输出 :

c:\ program files\microsoft visual\studio 10.0\vc\include\algorithm(4494):错误C2678:'='binary:没有运算符定义,它采用类型为'const std :: basic_string <_Elem的左手操作数, _Traits,_Ax>'(或没有可接受的转换)

如果我用一个std::vector而不是std::set编译成功.可)

stl visual-c++ visual-c++-2010

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

将make_shared与受保护的构造函数+抽象接口一起使用

给定一个抽象接口和从该接口派生的实现,其中构造函数受到保护(这些对象的创建只能从类工厂中获得 - 实现DI模式),如何在工厂函数中使用make_shared?

例如:

class IInterface
{    
public:    
    virtual void Method() = 0;
};

class InterfaceImpl : public IInterface
{
public:
    virtual void Method() {}

protected:    
    InterfaceImpl() {}    
};

std::shared_ptr<IInterface> Create()
{
    std::shared_ptr<IInterface> object = std:: make_shared<InterfaceImpl>();    
    return object;
}
Run Code Online (Sandbox Code Playgroud)

make_shared显然无法访问InterfaceImpl中的受保护构造函数,或者实际上是在IInterface中,给出了以下错误


error C2248: 'InterfaceImpl::InterfaceImpl' : cannot access protected member declared in class 'InterfaceImpl'
Run Code Online (Sandbox Code Playgroud)

所以在这里阅读(问题:如何使boost :: make_shared成为我班级的朋友),我尝试将以下内容放入实现类中:


friend std::shared_ptr<InterfaceImpl> std::make_shared<InterfaceImpl>();
Run Code Online (Sandbox Code Playgroud)

它仍然无法编译.那么我也将另一个放入IInterface类.仍然没有快乐.我在这做错了什么?

编辑:用于编译的完整源文件,与"朋友"...

#include <memory>

class IInterface
{    
public:    
    friend std::shared_ptr&lt;IInterface> Create();     
    virtual void Method() = 0;
};

class …
Run Code Online (Sandbox Code Playgroud)

c++ constructor protected visual-c++-2010 make-shared

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

如何链接到Visual C++ 2010中的.lib文件?没有参考项目?

我有一个问题,我一直试图修复最长的时间.

我在visual c ++中有一个静态库项目,我希望另一个项目能够链接到它.到目前为止,我只是添加了对静态库项目的引用,该项目自动链接库.

我希望能够仅使用头文件和.lib文件链接到库.但是,我收到"未解析的外部符号"错误.

我以为我做得对 - 我指定了include目录,库目录,然后进入链接器输入属性并提供了lib作为附加依赖项.

我能够以这种方式引用其他静态库(如SDL),那么当我尝试引用我的时候为什么会出错呢?

谢谢您的帮助.

问题是它没有引用实际的lib文件,还是lib本身内的东西?这些是我得到的错误消息:

错误2错误LNK2019:未解析的外部符号"public:void __thiscall XEngine :: XCore :: XScreen :: init(class XEngine :: XCore :: XGame&)"(?init @ XScreen @ XCore @XEngine @@ QAEXAAVXGame @ 23 @ @Z)在函数"void __cdecl XEngine :: XEngineInit(类XEngine :: XCore :: XScreen&,类XEngine :: XCore :: XGame&)"中引用(?XEngineInit @XEngine @@ YAXAAVXScreen @ XCore @ 1 @ AAVXGame @ 31 @@ Z)C:\ Users\Xander Masotto\Documents\Visual Studio 2010\Projects\Pong\Pong\source.obj Pong

错误3错误LNK2019:未解析的外部符号"public:__thiscall XEngine :: XCore :: XScreen ::〜XScreen(void)"(?? 1XScreen @ XCore @ XEngine @@ QAE …

c++ static visual-c++-2010

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

我应该使用哪个头文件来使用_swprintf_s()?

当我使用_swprintf()时,它说它可能不安全,我应该使用_swprintf_s代替.

但当我使用_swprintf_s()时,它说

错误C3861:'_ swprintf_s':找不到标识符

我错过哪个标题?一世

visual-studio-2010 visual-c++-2010

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

使用visual studio express 2010 Forms Application的C++ MultiThreading

我正在开发一个Windows表单应用程序,它连接到一个硬件,获取大量数据(~1 GSample/sec),处理它,并在点击按钮时将其吐出到屏幕上.我现在正试图在一个可以随时启动/停止的循环中自动执行该过程,这样我就可以在调整采集硬件的输入的同时对其进行监控.我认为很明显我需要在一个单独的线程上执行此操作,但我有一点时间尝试在c ++/cli中执行此操作 - 我已经找到了一些使用MFC的好例子,这是不受支持的表达.

具体来说:我的任务是按下一个在Form1.h中处理的按钮来调用我的主文件Acquisition.cpp中的一个函数,它包含以下代码(当前是一个无限循环)

void Form1::realTimeUpdate()  
{  
    // live is a boolean variable set by a button on the form
    while(live)  
    {  
        displayVariance(getVar(getQuadratures(100),nbrSamples));  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

我希望在一个单独的线程中执行此代码,以便主程序可以侦听用户请求以停止操作.如果没有线程,我当前必须强制退出程序(或将其设置为运行固定次数)以阻止它.

有什么建议我可以在单独的线程上运行此代码吗?

我已经(不成功)尝试了一些事情:

  1. 修改此Microsoft示例中给出的示例.问题:需要/ clr:oldSyntax选项,它与程序中的其他1300行代码不兼容.

  2. 尝试做我在Java中做的事情(声明一个全局线程并从代码中的任何一点开始/停止它.问题:编译器不会让我声明一个全局的System :: Threading.Thread

  3. 这个美丽的例子.问题:需要MFC.

任何建议将不胜感激!

multithreading c++-cli visual-studio-2010 visual-c++ visual-c++-2010

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

带有lambda表达式的模板类中的语法错误

我有以下简化方案:

template< typename T>
struct A
{
  A() : action_( [&]( const T& t) { })
  {}

private:
   boost::function< void( const T& )> action_;
};
Run Code Online (Sandbox Code Playgroud)

使用Visual C++ 2010进行编译时,它在构造action_时给出了语法错误:

1>test.cpp(16): error C2059: syntax error : ')'
1>          test.cpp(23) : see reference to class template instantiation A<T>' being compiled
Run Code Online (Sandbox Code Playgroud)

奇怪的是,同样的例子,没有模板参数,编译得很好:

struct A
{
  A() : action_( [&]( const int& t) { })
  {}

private:
  boost::function< void( const int& )> action_;
};
Run Code Online (Sandbox Code Playgroud)

我知道问题的一个解决方法是在构造函数体中移动action_初始化,而不是初始化列表,如下面的代码中所示:

template< typename T>
struct A
{
  A()
  {
    action_ = …
Run Code Online (Sandbox Code Playgroud)

c++ lambda visual-c++-2010 c++11

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

自定义OS上的STL - std :: list可以工作,但std :: vector不能

我只是在visual studio 2010中使用grub-bootable C++内核.

我已经达到了新的和删除写入的地步,以及动态分配的数组等工作.例如,我可以使用STL列表.在我写了一个memcpy例程后,我甚至可以对它们进行排序.问题是当我使用std :: vector类型时.简单地构造向量将内核发送到la la land.

显然我错过了某种功能实现,但我通过STL搜索它并空手而归.它在push_back失败:

vector<int> v;
v.push_back(1);
Run Code Online (Sandbox Code Playgroud)

并消失在以太.

有什么猜测我错过了什么?

编辑是的它是int的向量.对困惑感到抱歉.不仅如此,它不是它失败的构造函数,它是对push_back的调用.

operating-system visual-studio-2010 stdvector visual-c++-2010

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

Visual C++ 2010,rvalue参考错误?

它是Visual C++ 2010中的错误还是正确的行为?

template<class T>
T f(T const &r)
{
    return r;
}

template<class T>
T f(T &&r)
{
    static_assert(false, "no way"); //< line # 10
    return r;
}

int main()
{
    int y = 4;
    f(y); //< line # 17
}
Run Code Online (Sandbox Code Playgroud)

我想,函数f(T &&)永远不应该被调用,但是用T = int&调用它.输出:

    main.cpp(10): error C2338: no way
          main.cpp(17) : see reference to function template instantiation 'T f(T)' being compiled
          with
          [
              T=int &
          ]

更新1您是否知道任何C++ x0编译器作为参考?我已经尝试了在线测试驱动但无法编译r值参考.

更新2解决方法(使用SFINAE):

#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_reference.hpp>

template<class T>
T …
Run Code Online (Sandbox Code Playgroud)

c++ rvalue-reference visual-c++ visual-c++-2010 c++11

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

通知图标接收到 WM_LBUTTONDBLCLK 但未接收到 WM_CONTEXTMENU

我向基于对话框的应用程序添加了一个通知图标,当双击该图标时,它收到了 WM_LBUTTONDBLCLK,但当右键单击该图标或用键盘突出显示该图标并且上下文菜单键为按下。我根据 Windows 7.1 SDK 示例中的示例使用通知图标。所以,我不知道我哪里出了问题,也不知道为什么这不起作用。

注意:如果我将 WM_CONTEXTMENU 更改为 WM_RBUTTONUP,它会收到事件,但光标坐标错误。

/******************************************************************************/
/* Menu Resource                                                              */
/******************************************************************************/
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_TRAYMENU MENU
{
    POPUP ""
    {
        MENUITEM "&Show Status Window", IDM__SHOW_STATUS_WINDOW
        MENUITEM "&About", IDM__ABOUT
        MENUITEM SEPARATOR
        MENUITEM "&Exit", IDM__EXIT
    }
}

/******************************************************************************/
/* WinMain()                                                                  */
/******************************************************************************/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{

    // ... code unrelated to icon

    // Enable Visual Styles
    InitCommonControls();

    // create the main dialog
    if( NULL == (hWnd=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_MAINDLG),NULL,(DLGPROC)WndProc)) )
    {
        MessageBox( …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-c++-2010

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