C ++ LNK2001:添加Windows Phone运行时组件时未解析的外部符号

时间:2014-03-15 15:33:00

标签: c++ windows-phone-8 visual-studio-2013

这可能是一个重复的问题,但据我搜索,我找不到问题。 返回的错误是依赖项的问题,但我不明白实际上是什么错误。所以我有一个Windows Phone项目,我添加了一个Windows Phone运行时组件项目, 我在.header中创建了一个类和2个公共函数:

 public ref class Base64Encoding sealed
{
public:
    String^ EncodeData(String^ StringData);
    String^ DecodeString(String^ StringData);
};

在我的.cpp我填充了函数

#include "pch.h"
#include "Base64Encode.h"
#include <wchar.h>
#include <string>
#include <iostream>
#include <stdlib.h>
String^ EncodeData(String^ StringData)
  {
    .
    .
    .
    .
     // return the result
        return StringFromAscIIChars(result);

    }
String^ DecodeString(String^ StringData)
    {    
    .
    .
    .
      return StringFromAscIIChars(result);
    }

当我尝试构建2个LNK2001类型的错误时返回如下:

Error 1 error LNK2001: unresolved external symbol "public: virtual
class Platform::String ^ __cdecl
Base64Encode_::Base64Encoding::[Base64Encode_::__IBase64EncodingPublicNonVirtuals]::EncodeData(class
Platform::String ^)"
(?EncodeData@?Q__IBase64EncodingPublicNonVirtuals@Base64Encode_@@Base64Encoding@2@U$AAAP$AAVString@Platform@@P$AAV45@@Z)    C:\Users\CodeNinja\Documents\Visual
Studio
2013\Projects\OpenscapeWP\Base64Encode\Base64Encode.obj Base64Encode

Error 2 error LNK2001: unresolved external symbol "public: virtual
class Platform::String ^ __cdecl
Base64Encode_::Base64Encoding::[Base64Encode_::__IBase64EncodingPublicNonVirtuals]::DecodeString(class
Platform::String ^)"
(?DecodeString@?Q__IBase64EncodingPublicNonVirtuals@Base64Encode_@@Base64Encoding@2@U$AAAP$AAVString@Platform@@P$AAV45@@Z)  C:\Users\CodeNinja\Documents\Visual
Studio
2013\Projects\OpenscapeWP\Base64Encode\Base64Encode.obj Base64Encode

如果我删除.header中两个函数的public关键字,则链接器问题就会消失,但函数不可访问。

在标题中,我得到了一个静态函数,可以从ASCII转换为字符,但我认为这不是问题。那有什么不对?

1 个答案:

答案 0 :(得分:0)

我想出了这个问题,即使我正在回答我自己的问题,我也会在这里留下答案。我在.cpp文件中创建了两个全局函数。他们需要成为班级成员:

String^ Base64Encoding::EncodeData(String^ StringData)
{ ... }

String^ Base64Encoding::DecodeString(String^ StringData)
{ ... }