0

这是整个代码。编译后出现以下错误:

错误 LNK2019:函数 _wmain 中引用的未解析的外部符号“void __cdecl CandyBarFunc(struct CandyBar &,char const *,double,int)”(?CandyBarFunc@@YAXAAUCandyBar@@PBDNH@Z)

致命错误 LNK1120:1 个未解决的外部问题

#include "stdafx.h"
#include <iostream>
using namespace std;

struct CandyBar
{
    char name[40];
    double weight;
    int calories;
};

void CandyBarFunc(CandyBar & astruct, const char * aname = "Millennium Munch", double aweight = 2.85, int acalories = 350);
void CandyBarFunc(const CandyBar & astruct);

int _tmain(int argc, _TCHAR* argv[])
{
    CandyBar MyCandyBar;
    CandyBarFunc(MyCandyBar, "Hello World Candy Bar", 1.25, 200);
    CandyBarFunc(MyCandyBar);
    return 0;
}

void CandyBarFunc(CandyBar & astruct, char * aname, double aweight, int acalories)
{
    strncpy(astruct.name,aname,40);
    astruct.weight = aweight;
    astruct.calories = acalories;
}

void CandyBarFunc(const CandyBar & astruct)
{
    cout << "Name: " << astruct.name << endl;
    cout << "Weight: " << astruct.weight << endl;
    cout << "Calories: " << astruct.calories;
}
4

5 回答 5

3

由于name定义为char name[40],因此您无法编写astruct.name = aname试图更改name数组地址的内容。但是数组的地址不能改变。因此错误。

做这个: strcpy(astruct.name, aname);

更好的是,定义CandyBar为,

struct CandyBar
{
     std::string name;
     double weight;
     int calories;
};

现在你可以写:astruct.name = aname;

于 2011-02-15T16:54:40.427 回答
1

你不能写char * aname = "Millenium Falcon",因为"Millenium Falcon"是一个(const char *),一个不可修改的内存。const char * aname如果可以,请更改您的函数签名以接受 a 。或者使用 std::string 代替,毕竟您正在编写 C++。

于 2011-02-15T16:51:58.180 回答
1

正如目前所说的那样,缺少的是 ; 在结构 CandyBar 的右大括号之后。

于 2011-02-15T17:13:16.323 回答
1

您将 CandyBar.name 定义为一个数组,它与 char 指针不同。您将不得不使用 strcpy 之类的东西而不是赋值语句。最好只使用 STL 字符串。

根据您的评论问题,请参见此处

于 2011-02-15T16:53:00.547 回答
1

用这个:

  strncpy(astruct.name, aname, sizeof(astruct.name)); 
  astruct.name[sizeof(astruct.name)-1] = 0;

编辑:并回应您完全改变的问题:

“char * aname”与“const char * aname”不同。您转发声明一个(它给出未解析的外部),然后实现另一个,它永远不会被调用。

于 2011-02-15T16:54:51.823 回答