1

我得到以下代码:

FooClass.h

#pragma once

#include <string>
#include "StdAfx.h"
#include "FooClass.h"

#include <iostream>
#include "FooClass.h"

FooClass::FooClass(void)
{
}


FooClass::~FooClass(void)
{
}


int PrintMsg (std::string msg)
{
    printf ("%s\n", msg);
    return 1;
}

class FooClass
{
public:
    FooClass(void);
    ~FooClass(void);

    static int PrintMsg (std::string msg);
};

FooClass.cpp


CODETESTER.cpp

// CODETESTER.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "FooClass.h"

int _tmain(int argc, _TCHAR* argv[])
{
    FooClass::PrintMsg ("Hi World!!");

    return 0;
}

在构建项目时,我收到以下错误:

Erro 4 错误 LNK2019: símbolo externo indefinido "public: static int __cdecl FooClass::PrintMsg(class std::basic_string,class std::allocator >)" (?PrintMsg@FooClass@@SAHV?$basic_string@DU?$char_traits@ D@std@@V?$allocator@D@2@@std@@@Z) 参考函数 _wmain E:\2。MEZASOFT\DESENVOLVIMENTO\PROTOTIPOS\CODETESTER\CODETESTER\CODETESTER.obj CODETESTER

我已经阅读了几篇关于这个主题的文章以及帮助,但没有找到如何修复它。

我知道 .h 不足以让链接器知道 PrintMsg 代码在哪里,但是 - 我该如何解决它。

对不起,如果这是一个基本问题。很久以前,我曾经是一名优秀的 C 程序员。我作为 C++ 程序员回来了。

4

1 回答 1

2

您为 FooClass 声明了 PrintMsg 函数,但从未定义/实现它。相反,您定义了一个与 FooClass 无关的函数 PrintMsg。

为 FooClass 正确实现 PrintMsg 函数:

int FooClass::printMsg(std::string msg)
{
    printf("%s\n", msg.c_str());
    return 1;
}

作为旁注,您可能应该通过引用传递参数 msg 。这样,每次调用 printMsg 时都不会复制字符串对象。

// you'll also need to change the printMsg declaration inside the FooClass
int FooClass::printMsg(const std::string &msg)
{
    printf("%s\n", msg.c_str());
    return 1;
}
于 2013-04-04T00:30:05.167 回答