C++ c+中未解析的外部符号+;使用MS visual studio 9

C++ c+中未解析的外部符号+;使用MS visual studio 9,c++,linux,windows,C++,Linux,Windows,我的代码将类似于以下代码: class DMLGroup { public: DMLGroup(); ~DMLGroup(); void SetName(string name); private: string mName; }; void DMLGroup::SetName(string nm){ mName.assign( nm ); } int main() { string api="API_DML"; DMLGroup

我的代码将类似于以下代码:

class DMLGroup
{
 public:
  DMLGroup();
 ~DMLGroup();
  void    SetName(string name);
 private:
 string mName; 
 };
void DMLGroup::SetName(string nm){
   mName.assign( nm );
}

int main()
{        
   string api="API_DML"; 
    DMLGroup * dmlGr = new DMLGroup();
    dmlGr->SetName(api.c_str()); //Getting link error with this statement
}
我可以编译上面的代码,但在Windows7 32位操作系统上使用MSVisualStudio9链接失败

注意:我能够在suselinux-x8664平台上成功编译、链接和运行。问题只出现在windows上


请告诉我如何解决此问题?

以下代码编译并链接良好:

#include "stdafx.h"
#include <string>

class DMLGroup
{
public:
    DMLGroup() {}
    ~DMLGroup(){}
    void    SetName(std::string name);
private:
    std::string mName; 
};
void DMLGroup::SetName(std::string nm){
    mName.assign( nm );
}

int main()
{        
    std::string api="API_DML"; 
    DMLGroup * dmlGr = new DMLGroup();
    dmlGr->SetName(api.c_str()); //Getting link error with this statement
}
#包括“stdafx.h”
#包括
类DMLGroup
{
公众:
DMLGroup(){}
~DMLGroup(){}
void SetName(std::string name);
私人:
std::字符串mName;
};
void DMLGroup::SetName(std::string nm){
mName.assign(nm);
}
int main()
{        
std::string api=“api\u DML”;
DMLGroup*dmlGr=新的DMLGroup();
dmlGr->SetName(api.c_str());//获取此语句的链接时出错
}
我改变的是:

  • #包括stdafx.h,因为它是VS标准的-您可以关闭它
  • #因为它不见了
  • 用std::-修饰字符串的每次使用,因为很可能在头文件中使用类定义,而在头文件中不使用“使用名称空间”
  • 为构造函数和析构函数提供了默认实现

就这些。检查上面部分中缺少的内容或提供暴露问题的示例并提供链接器错误消息。

调用
SetName
时,您希望发生什么?我还怀疑您是否有足够的链接,
class DMLGroup()
当然不应该编译。您没有
SetName
函数的定义,因此它不会链接到任何地方。它甚至可能不会编译——类名后的括号是无效语法。请确保复制并粘贴您正在使用的实际代码。未正确发布代码。。。只是专注于提出我的问题..抱歉
DMLGROUP
vs
DMLGROUP
,是故意的吗?如果此代码位于同一文件中,则不应出现链接器错误(除非它位于
std::string::c_str()
!)第一个是类型,第二个是正确的,您猜是正确的,此代码不在同一文件中。