void() 问题 - 它不打印结果



我正在写一个程序,分为三个不同的文件:

  1. 1)一个名为my.h的报头;
  2. cpp源文件my.cpp;
  3. 主文件名为use.cpp;

下面是它们的语句:

/* Header file my.h
Define global variable foo and functions print and print_foo
to print results out */
extern int foo;
void print_foo();
void print(int);

/* Source file my.cpp where are defined the two funcionts print_foo() and print()
and in where it is called the library std_lib_facilities.h */
#include "stdafx.h"
#include "std_lib_facilities.h"
#include "my.h"
void print_foo() {
    cout << "The value of foo is: " << foo << endl;
    return;
} 
void print(int i) {
    cout << "The value of i is: " << i << endl;
    return;
}

/ use.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include "my.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int foo = 7;
    int& i = foo;
    i = 99;
    char cc = '0';
    while (cin >> cc) {
        switch (cc) {
        case '1':
            void print_foo();
            break;
        case '2':
            void print();
            break;
        default:
            exit(EXIT_FAILURE);
        }
    }
    return 0;
}

我的主要问题是程序编译和运行正确,但它没有打印任何东西,因为我想。

我该如何修复它?

谢谢!

狮子座

不需要调用指定返回类型的函数。正确的

void print_foo();    // This actually declares a function prototype

print_foo();

print(i);    // Pass i as argument

void print_foo();void print();switch块中删除void

目前你只是声明一个函数原型;实际上不是调用函数。

你的extern int foo;方法,虽然在语法上是有效的,但会使你的代码库更难扩展和维护:考虑显式传递参数。

你的代码声明*"定义全局变量foo…"如下所示…

extern int foo;

…但这只是声明了一些翻译单元将实际定义它(没有前面的extern限定符)。在你发布的代码中没有实际的变量,这意味着你的程序不应该链接,除非你使用的库碰巧有一个foo符号在里面。

这段简短的代码浓缩了你的问题:

#include <iostream>
extern int foo;
void f()
{
    std::cout << foo << 'n';
}
int main() {
    int foo = 7;
    f();
}

您可以在这里看到编译器错误消息,即:

/tmp/ccZeGqgN.o: In function `f()':
main.cpp:(.text+0x6): undefined reference to `foo'
collect2: error: ld returned 1 exit status

输入main函数

case '1':
    print_foo();
    break;

注意我在case 1中删除了单词"void"。因为你不需要重新声明函数。

相关内容

  • 没有找到相关文章

最新更新